0
        <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>来自类的 divmyClass1myClass2. 尝试过,.each()但我似乎无法掌握它,主要是我应该调用的函数的参数是什么。有什么帮助吗?

4

5 回答 5

2

您可以通过比较条件中跨度的内容来做到这一点:

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

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

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

更新:

-这对于包含诸如等字符串---的文本没有问题test-test

contains毛绒,比其他答案中命名的选项快 80% :http: //jsperf.com/just-a-demo

于 2013-07-03T16:15:00.740 回答
2

使用 :contains 选择器

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

删除整个 div:

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

JSFiddle

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

于 2013-07-03T16:15:35.980 回答
1

这是一个简单的解决方案。小提琴

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,'');
 }

小提琴

于 2013-07-03T16:21:05.823 回答
1

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

就像这样:

$('.myClass1,.myClass2').filter(function(i, el){ return el.innerHTML.trim() == '<span>-</span>' }).remove()
于 2013-07-03T16:26:13.630 回答
0

我会用.filter().

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

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

于 2013-07-03T16:26:03.593 回答