3

所以我有这段代码,它检查名称是否存在,如果存在,它会删除它嵌套的跨度标记。

<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 标签。我只想在它们位于已删除标签之前删除它们。

谢谢。

4

4 回答 4

2

filter()如果您想精确定位带有文本“名称”的元素,则可以使用,而不是:contains使用带有文本的元素,例如“带有其他文本的名称......”:

在 .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();

如果这不是你想要的行为,你必须在你的问题中更具体。

于 2013-07-03T08:17:09.513 回答
1

像这样的东西怎么样:

$('a:contains("Name"),b:contains("Name")').parents("span").remove();
于 2013-07-03T08:11:45.013 回答
1

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

您需要使用加载方法的回调来执行此操作,如果您使用的是 .load() 那么它有一个成功回调,您可以在其中调用它

于 2013-07-03T08:17:41.230 回答
1

试试这个:

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

演示

于 2013-07-03T08:23:15.630 回答