如果一个DOM元素包含某个字符串,如何移除它?

4

我有一段代码,它会检查名称是否存在,如果存在,则删除其所嵌套的span标签。

<div id="box">
  <br>
  <span style="font-size: 12px">
    <a>
      <span style="color: #000000">
        <b>Name</b>
      </span>
    </a>
  </span>

然而,名称也可以放置在这些标签中:
  <br>
  <span>
    <a>Name</a>
  </span>
</div>

我该如何使用jQuery来检查它呢?我尝试了:

$('span:contains("Name")').remove();
$('span > a > span b:contains("Name")').remove();

似乎什么都不起作用。

编辑#2:还有一些br标签,我只是包含了它们。如果它们在被删除的标签之前,请将它们移除。

谢谢。


6
“怎么做?”不是一个合适的标题。请用简短的几个词描述您的问题。 - Liam
$('span:contains("Name")').remove() 应该 可以工作,因为文档说 匹配的文本可以直接出现在所选元素中,也可以出现在该元素的任何后代中,或者两者结合使用。你能在一个简单的 fiddle 中重现你的问题吗? - Frédéric Hamidi
我会使用某个标识符(例如类或data-*属性)来指定要删除的元素。如果引用某个程序决策的标签可能会导致问题,例如如果您计划交换这些标签/让编辑器设置它们。 - feeela
http://jsfiddle.net/arunpjohny/nt67p/1/ 看起来可以工作。 - Arun P Johny
你如何加载这个内容?Ajax函数.load() ??? - A. Wolff
4个回答

2

如果您想精确地定位文本为“名称”的元素,而不是像:contains一样会定位包含其他文本的元素,您可以使用filter()

将代码放置在.load()回调函数中

$('#box').load('myUri', function () {
    $('#box span').has('b, a').filter(function () {
        return $.trim($(this).text()) === "Name";
    }).remove();
});

:contains等效的是:

$('#box span').has('b, a').filter(function(){
    return $(this).text().indexOf("Name") != -1;
}).remove();

在评论之后更新:

$('#box').load('myUri', function () {
     $('#box span').has('b, a').filter(function () {
         var toRemoveSpan = $(this).text().indexOf("Name") != -1 ? true : false;
         if (toRemoveSpan && $('span').prev('br').length) {
             $(this).prev('br').remove()
         }
         return toRemoveSpan;
     }).remove();
 });

这将得到与$('#box').empty();相同的结果。
如果这不是你想要的行为,你需要在你的问题中更加具体。

还有一些br标签,我只是把它们包含在内。如果它们在被删除的标签之前,我想将它们删除。 - Gui Thomas

1

试试这个:

$(function () {
    $('div#box span a span b:not(:contains("Name"))').remove();
})

演示


1
这个怎么样:

如下所示:

$('a:contains("Name"),b:contains("Name")').parents("span").remove();

1

根据编辑,您需要在元素加载后执行脚本。

您需要利用加载方法的回调来完成此操作,如果您正在使用.load(),则它具有成功回调,您可以在其中进行调用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接