2013-07-03 104 views
3

所以我有这样的代码,它检查,如果名称存在,如果这样做,将删除span标记它的嵌套英寸删除DOM元素,如果它包含一个字符串

<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

+0

我是新对不起.. –

+0

$('span:contains(“Name”)')。remove()* * should * work,因为文档中说'匹配的文本可以直接出现在所选元素,任何元素的后代或其组合中。你能用简单的[小提琴](http://jsfiddle.net/)重现你的问题吗? –

回答

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

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

+0

也有我刚刚包括他们的br标签。我只想在删除标签之前删除它们。 –

1

怎么是这样的:

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

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

您需要使用加载方法的回调就做,如果你正在使用.load(),那么它有一个成功回调,您可以调用这个

1

试试这个:

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

DEMO

相关问题