jquery удалить элемент списка, где он пуст

#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>