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>