#jquery #contains
#jquery #содержит
Вопрос:
<div id='id1' class="mainDiv">Something</div>
<div class="dispatch" id="dis1">Dispatch</div><table><tr><td>Just</td><td>a table</td></tr></table>
<div class='orderDiv'>Something else</div>
<div id='id2' class="mainDiv">Something</div>
<div class="dispatch" id="dis2">Dispatch</div><table><tr><td>Just</td><td>a table</td></tr></table>
<div class='orderDiv'>KEYWORD</div>
<div id='id3' class="mainDiv">Something</div>
<div class="dispatch" id="dis3">Dispatch</div><table><tr><td>Just</td><td>a table</td></tr></table>
<div class='orderDiv'>Something else</div>
Я хотел бы, чтобы для id1 и id3 были установлены значения display: none путем поиска по отсутствию «КЛЮЧЕВОГО СЛОВА».
Я пытался
$(".orderDiv")
.not(':contains("KEYWORD")')
.prevAll('.mainDiv:first')
.css('display','none');
но это только сделает id1
невидимым.
Обновить:
Все JSFiddle сработало, спасибо, но это не будет работать с моей оригинальной html-структурой, которую я теперь обновил выше. Также было бы здорово скрыть dis1 и dis3.
Комментарии:
1. Вы хотите скрыть только id1 и id3
2. Обновил мой ответ, это должно работать с вашей новой структурой
Ответ №1:
Вы можете использовать функцию filter:
$('.mainDiv').filter(function() {
return !$(this).next('.orderDiv:contains(KEYWORD)').length;
}).hide();
Если вы хотите показать только соответствующий основной div и упорядоченный div, вы также можете выполнить цепочку из следующего до конца:
.next('.orderDiv').hide();
Обновите согласно вашей правке
var divs = $('.orderDiv').not(':contains(KEYWORD)')
divs.each(function() {
var div = $(this);
div.hide()
.prev('table').hide()
.prev('.dispatch').hide()
.prev('.mainDiv').hide();
});
Комментарии:
1. Есть идеи, почему
$('.orderDiv:contains(KEYWORD)').show().prev('.mainDiv').show();
не сработает отображение .mainDiv найденного КЛЮЧЕВОГО СЛОВА (при условии, что для его отображения ранее было установлено значение none)?2. поскольку mainDiv не является предыдущим классом orderDiv, вам придется выполнить
$('.orderDiv:contains(KEYWORD)').show().prev('table').prev('.dispatch').prev('.mainDiv').show();
3. О, хорошо, спасибо, но если бы моя структура изменилась с помощью любого html-тега, это было бы уже неправильно. Есть ли способ найти последний class .mainDiv при поиске по ключевому слову-Match?
4. В этом случае я бы заключил каждую строку в div, тогда вы можете сделать
$('.orderDiv:contains(KEYWORD)').show().parent().children('.mainDiv')
5. Спасибо, но он также покажет неправильный .mainDiv jsfiddle.net/FGcm4/11 (и, к сожалению, мы не можем изменить структуру div — это закрытая система)
Ответ №2:
это скроет id1 и id3
$(".orderDiv").not(':contains("KEYWORD")').prevAll('.mainDiv').not(':eq(1)').each(function()
{
$(this).css('display','none')
});