当没有唯一标识属性但有 HTML 注释时,如何使用 jQuery 选择 HTML?

发布于 2024-12-21 06:24:24 字数 687 浏览 0 评论 0原文

我正在为我经常访问的论坛编写自定义脚本。它的设计目的是当我查看板上的签名时将其从板上删除,因为它们会分散注意力并且令人厌烦,并且无法在选项中禁用它们。

无论如何,我可以使用有用的 Chrome 扩展程序运行自定义脚本。我能够修改页面的任何部分,其中 HTML 节点具有类、ID,甚至具有一些唯一信息的属性,但我似乎无法弄清楚如何使用 jQuery 选择和删除以下 HTML。

    <tr>
      <td colspan="2">
        <!--Signature-->
            <div class="resultText">
                <!-- sig -->
                    <div>Signature text</div>
                <!-- / sig -->

            </div>
      </td>
    </tr>

如果有一种方法可以获取 的父级,那将是完美的,但我不确定这是否可能。

有一个 resultText 类,但该类在用户输入文本的任何地方使用,而不仅仅是在签名中。所以我无法抓住这一点。

I am writing a custom script for a forum I frequently visit. It is designed to remove signatures from the board when I view it because they are distracting and annoying and they have no way to disable them in the options.

Anyway, I can run custom scripts using a helpful Chrome extension. I am able to modify any portions of the page where HTML nodes have classes, IDs, or even attributes with a little bit of unique information, but I can't seem to figure out how to select and remove the following HTML with jQuery.

    <tr>
      <td colspan="2">
        <!--Signature-->
            <div class="resultText">
                <!-- sig -->
                    <div>Signature text</div>
                <!-- / sig -->

            </div>
      </td>
    </tr>

If there was a way I could grab the parent of <!--Signature--> that would be perfect but I'm not sure that's even possible.

There is one class resultText but that class is used wherever there is text entered by the user, not just in the signature. So I can't grab onto that.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

薔薇婲 2024-12-28 06:24:24

即使 resultText 类在其他地方使用,我仍然建议使用类选择器作为起点,否则您将在整个文档中查找注释节点。

从匹配的元素中,您可以获取其父级的 contents(),使用 filter() 来隔离注释节点(它们的 nodeType 属性是相等的到 8)并将这些节点的值与您的值进行比较签名字符串:

$(".resultText").parent().each(function() {
    var $this = $(this);
    var signature = $this.contents().filter(function() {
        return this.nodeType == 8 && this.nodeValue == "Signature";
    });
    if (signature.length) {
        // Signature found, $this is the <td> element.
        $this.closest("tr").remove();  // For example.
    }
});

Even if the resultText class is used elsewhere, I'd still recommend using a class selector as a starting point, otherwise you will be looking for comment nodes in the entire document.

From the matched elements, you can get their parents' contents(), use filter() to isolate the comment nodes (their nodeType property is equal to 8) and compare the value of these nodes to your Signature string:

$(".resultText").parent().each(function() {
    var $this = $(this);
    var signature = $this.contents().filter(function() {
        return this.nodeType == 8 && this.nodeValue == "Signature";
    });
    if (signature.length) {
        // Signature found, $this is the <td> element.
        $this.closest("tr").remove();  // For example.
    }
});
去了角落 2024-12-28 06:24:24

您可以使用 .contents() 获取元素的所有子节点: http:// /api.jquery.com/contents

来自文档:

获取匹配元素集中每个元素的子元素,
包括文本和注释节点。

$('tr').each(function (index, obj) {
    $(this).children('td').contents();//this selects all the nodes in each TD element in the table, including comment nodes
});

这是一个演示: http://jsfiddle.net/NLhz9/1/

You can use .contents() to get all the child nodes of an element: http://api.jquery.com/contents

From the docs:

Get the children of each element in the set of matched elements,
including text and comment nodes.

$('tr').each(function (index, obj) {
    $(this).children('td').contents();//this selects all the nodes in each TD element in the table, including comment nodes
});

Here is a demo: http://jsfiddle.net/NLhz9/1/

再可℃爱ぅ一点好了 2024-12-28 06:24:24

由于该脚本基本上只适合您,因此请使用 xpath 查找注释。

尝试这样的事情:

var comment, comments = document.evaluate('//comment()', document);
while ((comment=comments.iterateNext())) {
  if (comment.data=='Signature') { // found one
    comment.parentNode.parentNode.removeChild(comment.parentNode);
  }
}

Since the script is basically just for you, use xpath to find the comments.

Try something like this:

var comment, comments = document.evaluate('//comment()', document);
while ((comment=comments.iterateNext())) {
  if (comment.data=='Signature') { // found one
    comment.parentNode.parentNode.removeChild(comment.parentNode);
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文