Jquery удалить элемент списка, где .text() = 'blabla'
У меня есть следующая структура
<ul>
<li><a ...>something</a></li>
...
<li><a ...>blabla</a></li>
<ul>
Мне нужно удалить элемент li
, где текст якоря - blabla.
Как я могу выбрать этот элемент?
$(--what selector here--)
или мне нужно выполнить цикл над каждым li
и сравнить его значение .text()
с 'blabla'?
Ответы
Ответ 1
Если вы хотите содержать (подстрока), то :contains()
работает:
$('li:contains("blabla")').remove();
Если требуется точное совпадение, например. не сопоставляя "blablabla", вы можете использовать .filter()
:
$('li').filter(function() { return $.text([this]) === 'blabla'; }).remove();
Ответ 2
$('li > a:contains("blabla")').remove();
Посмотрите : содержит селектор.
Я только что заметил, что :contains
выполняет частичное сопоставление. Возможно, вам придется...
$('li > a:contains("blabla")').each(function() {
if ($(this).text() === 'blabla') {
$(this).parent().remove();
}
});
Вы также можете сделать селектор менее строгим, если сделать это таким образом.
... или вы можете сделать это намного опрятно, как Nick Craver.
Ответ 3
Если вы хотите избежать удаления li
, содержащего blabla
, если blabla
не является вложенным, используйте это:
$("ul li > a:contains('blabla')").parent().remove()
;
В противном случае первый li
из этого HTML будет удален, даже если "blabla" не там, где вы можете его настроить:
<ul>
<li>
<div>
Some nested content here:
<span>
Blablabla
</span>
</div>
</li>
<li>Some text</li>
</ul>