<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()
,但我似乎无法掌握它,主要是我应该调用的函数的参数。有什么帮助吗?
答案 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();
请注意,这是一个快速而肮脏的解决方案,因为它会删除包含 -
的所有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,'');
}
答案 3 :(得分:1)
您可以使用.filter()进行过滤。
$('.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/