删除满足条件的所有元素

时间:2013-07-03 16:11:59

标签: javascript jquery html

        <div class="myClass1">
            <span>tesutokana</span>
        </div>
        <div class="myClass2">
            <span>tesutoroma</span>
        </div>
        <div class="myClass1">
            <span>-</span>
        </div>
        <div class="myClass2">
            <span>-</span>
        </div>
        <div class="myClass1">
            <span>-</span>
        </div>
        <div class="myClass2">
            <span>-</span>
        </div>

我想从类<span>-</span>myClass1中删除仅myClass2的所有div。尝试.each(),但我似乎无法掌握它,主要是我应该调用的函数的参数。有什么帮助吗?

5 个答案:

答案 0 :(得分:2)

您可以通过在条件中比较跨度的内容来实现:

$('.myClass1, .myClass2').each(function(){
    var mySpan = $(this).find('span');

    if(mySpan.text() == '-'){
        mySpan.closest('div').remove();    
    }
});

活生生的例子:http://jsfiddle.net/8CNkW/2/

更新

对于包含-字符串的文字,例如---test-test等,此问题没有问题。

Plush,比其他答案中指定的contains选项快80%:http://jsperf.com/just-a-demo

答案 1 :(得分:2)

使用:contains selector

$("div span:contains(-)").remove();

删除整个div:

$("div span:contains(-)").parent().remove();

JSFiddle

请注意,这是一个快速而肮脏的解决方案,因为它会删除包含 -

的所有span

答案 2 :(得分:1)

这是一个简单的解决方案。 fiddle

var doc = document.body;
doc.innerHTML = doc.innerHTML.replace(/<div(\s)+(.)*class="myClass(1|2)"(.)*>(\s|\n|\t)*<span>-<\/span>(\s|\n|\t)*<\/div>/ig,'');

这可能是最快的解决方案,因为它不使用循环或外部库。

 var j = document.getElementsByClassName('myClass1');
 var t = document.getElementsByClassName('myClass2');
 var x = t.length--;
 while(x--) {
   t[x].innerHTML = t[x].innerHTML.replace(/(<span>-<\/span>)/g,'');
 }
 x = j.length--;

 while(x--) {
   j[x].innerHTML = j[x].innerHTML.replace(/(<span>-<\/span>)/g,'');
 }

fiddle

答案 3 :(得分:1)

您可以使用.filter()进行过滤。

Just like that:

$('.myClass1,.myClass2').filter(function(i, el){ return el.innerHTML.trim() == '<span>-</span>' }).remove()

答案 4 :(得分:0)

我会使用.filter()

$('div').filter(function(){
  var $spans = $(this).find('> span');
  return $spans.length === 1 && $spans.text() === '-';
}).remove();

这是一个快速演示:http://jsfiddle.net/VbpzZ/1/

相关问题