javascript - 如何在Jquery中删除Ol子元素没有Li的Li元素?

标签 javascript jquery html

使用下面给定的代码,我想删除其子 ol 元素确实包含任何 li 元素的任何“li”元素,但无济于事。

$(document).ready(function() {
  $('#myUL li').each(function() {
    var lenLi = $(this).find('ol').children('li').length;
    if (lenLi == 0) {
      $(this).remove();
    }
  })
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<ol id="myUL">
  <li>Hello 1</li>
  <li>Hello 2
    <ol></ol>
  </li>
  <li>Hello 3
    <ol>
      <li>Hello 3.1</li>
      <li>Hello 3.2</li>
      <li>Hello 3.3</li>
    </ol>
  </li>
</ol>

执行上述代码后,Hello 1、Hello 2 被删除。然而Hello 3的 child 也全部被移除了。

我的问题是为什么会这样?

最佳答案

您的选择器#myUL li也会选择Hello 3中的li,因为它们是#myUL<的li后代 并且由于它们中没有带有 liol ,因此它们被删除。 您可以使用子选择器 > 仅选择 #myUL 的子级。

$(document).ready(function() {
  $('#myUL > li').each(function() {
    var lenLi = $(this).find('ol').children('li').length;
    if (lenLi == 0) {
      $(this).remove();
    }
  })
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

<ol id="myUL">
  <li>Hello 1</li>
  <li>Hello 2
    <ol></ol>
  </li>
  <li>Hello 3
    <ol>
      <li>Hello 3.1</li>
      <li>Hello 3.2</li>
      <li>Hello 3.3</li>
    </ol>
  </li>
</ol>

关于javascript - 如何在Jquery中删除Ol子元素没有Li的Li元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814603/

相关文章:

javascript - 使圆在svg中可点击

javascript - 将 undefined 分配给构造函数中的属性

jquery - Bootstrap Collapse Tree View with Tree Levels(使用 CSS)

javascript - Rails 聊天实时更新(AJAX 或 WebSockets)

javascript - 使用 javascript 将 css 应用于 iframe(无法控制此域)

javascript - 当 true 时, Angular ngif 自动发送表单

html - 在特定尺寸的 div 中适合不同尺寸的图像

javascript - 在 google-app 脚本中的 If..If Else..Else 中调用函数

javascript - Kinetic.js 文本有时会在设置填充值的形状下绘制

jquery - 应用不透明度而不影响子元素