#jquery #html-lists #remove-if
#jquery #html-списки #удалить-если
Вопрос:
<ul id="myid">
<li class="example"><a href="New-Orleans">New Orleans</a></li>
<li class="example"><a href></a></li>
<li class="example"><a href="Miami">Miami</a></li>
<li class="example"><a href></a></li>
</ul>
Мне нужно удалить элементы li, где текст привязки пуст.
Как бы мне поступить с выбором этого элемента? $(—какой селектор здесь —)
Ответ №1:
Вы можете попробовать вот так :
$(".example > a[href='']").closest('li').remove()
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="myid">
<li class="example"><a href="New-Orleans">New Orleans</a></li>
<li class="example">
<a href></a>
</li>
<li class="example"><a href="Miami">Miami</a></li>
<li class="example">
<a href></a>
</li>
</ul>
Ответ №2:
Вы можете проверить пустоту привязки, а затем удалить родительский элемент. Что-то вроде приведенного ниже фрагмента.
$(document).ready(function () {
$('#myid .example a').map(function(i,v) {
$(this).is(':empty')?$(this).parent().remove():'';
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="myid">
<li class="example"><a href="New-Orleans">New Orleans</a></li>
<li class="example"><a href></a></li>
<li class="example"><a href="Miami">Miami</a></li>
<li class="example"><a href></a></li>
</ul>
Комментарии:
1. Метод сопоставления @PranavRustagi быстрее, чем каждый метод.
2. Тогда не было
for
бы намного быстрее?3.@PranavRustagi Вы можете проверить, какой метод занимает больше времени, например:
console.time('map')
Напишите здесь функциональность картыconsole.timeEnd('map')
console.time('each')
, напишите здесь каждую функциональностьconsole.timeEnd('each')
и откройте консоль, чтобы увидеть время.4. Нет, это не то, что я имел в виду. Я знаю
map
, что выполняется намного быстрее, чемeach
. Я прошу, чтобы это было неfor
лучше, чемmap
, поскольку оно выполняется быстрее, чемmap
. Что я имел в виду под моим первым комментарием к использованиюeach
, так это то, что мы должны использовать функции, которые имеют эту цель.filter
быстрее, чемmap
, но его цель другая, верно?5. @PranavRustagi Да, но когда вы пишете кодирование, то дело идет быстрее, поэтому удаление вашего однострочного кода
$(".example:has(a[href=''])").remove()
занимает больше времени, чем удаление любогоmap
илиfor
илиfilter
после готовности документа.
Ответ №3:
Кратчайший путь :
$(".example:has(a[href=''])").remove()
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="myid">
<li class="example"><a href="New-Orleans">New Orleans</a></li>
<li class="example"><a href></a></li>
<li class="example"><a href="Miami">Miami</a></li>
<li class="example"><a href></a></li>
</ul>