2013-09-30 3 views
1

Перед тем, как начать, это своего рода «части 2» Search for divs that contain specified textСкрытие родительский элемент, когда нет подходящих элементов-потомков

Эй. я получил список дивы, и каждый из них имеет несколько див (в стиль), это выглядит следующим образом:

<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 это удалит DIV, содержащий def и ghi, хотя поиск соответствовал DIV (один с ABCDEFGHI внутри). Итак: Как бы выполнить функцию поиска, которая удаляет главный div, если ничего не соответствует (например, j) и покажет все divs внутри div, содержащего другие divs, независимо от того, сколько divs соответствует.

Заранее спасибо.

пс. если кто-то знает лучше название, вы можете изменить его

ответ

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

Как я могу исключить div, содержащий 'abc', если он имеет, например,' class = "first3" '? – PMint

Смежные вопросы