2013-09-30 157 views
1

我开始之前,这是一种Search for divs that contain specified text隐藏父元素时,有没有匹配的子元素

嘿“第2部分”的。 我的div的列表,每个有几个申报单(样式),它看起来像这样:

<body> 
<div class='divlist'> 

<div> 
    <div>abc</div><div>def</div><div>ghi</div> 
</div> 

</div> 
</body> 

body标签我也得到了一个搜索(<input type='text' id='search' />

和我jQuery的:

$('#search').on('input', function(){ 
    var text = $(this).val(); 
    $('.divlist div').show();  
    $('.divlist div:not(:contains(' + text + '))').hide(); 
}); 

现在,如果我搜索abc它会删除包含defghi股利,尽管搜索相匹配的DIV(具有内ABCDEFGHI)。 因此: 如果没有任何匹配(例如,j),我将如何创建一个搜索功能来删除主div,并显示包含其他div的div内的所有div,而不管div有多少匹配。

在此先感谢。

ps。如果有人知道一个更好的标题,随意改变它

回答

1

相反过滤所有的div元素,筛选.divlist元素:使用儿童选择

$('.divlist:not(:contains(' + text + '))').hide(); 

或其直系div孩子:

$('.divlist > div:not(:contains(' + text + '))').hide(); 

您也可以使用.filter()方法,它比昂贵的:not(:contains())选择器更有效率:

$('.divlist > div').hide().filter(function() { 
    return $(this).text().indexOf(text) > -1; 
}).show(); 
+0

如果它包含'class =“first3”'',我将如何排除包含'abc'的div? – PMint

相关问题