JQuery:如何从 div 中提取 li 项目

Posted

技术标签:

【中文标题】JQuery:如何从 div 中提取 li 项目【英文标题】:JQuery: How to extract li items from div 【发布时间】:2020-04-17 10:04:36 【问题描述】:

我有以下包含无序列表和其他代码的 div:

<div id="myDiv">
    <ul>
       <div id="myInnerDiv">Here is a div</div>
       <li id="oneLi">One li</li>
       <script type="text/javascript">
           // some JS code
       </script>
       <li><span class="li-item">Some content 1</span></li>
       <li><span class="li-item">Some content 2</span></li>
       <li><span class="li-item">Some content 3</span></li>
    </ul>
</div>

我想获取&lt;script&gt;标签后面最新的&lt;li&gt;项对应的html

<ul>
    <li><span class="li-item">Some content 1</span></li>
    <li><span class="li-item">Some content 2</span></li>
    <li><span class="li-item">Some content 3</span></li>
</ul>

或者只是 li 项:

<li><span class="li-item">Some content 1</span></li>
<li><span class="li-item">Some content 2</span></li>
<li><span class="li-item">Some content 3</span></li>

你知道如何使用 jQuery 实现这一目标吗?

【问题讨论】:

源标记无效。 &lt;div&gt;s 不允许作为 &lt;ul&gt; 元素 (MDN) 的子元素。 【参考方案1】:

您可以使用Next Siblings Selector (~)选择另一个元素之后的元素

您也可以使用.nextAll() 来实现相同的功能 - $('#myDiv script').nextAll('li')

我还使用.clone() 安全地在返回的元素上使用.wrapAll('&lt;ul&gt;') 而不会影响DOM

// Returns a jQuery object containing the three <li> items after script
// Then clone ( to leave DOM as is ) and wrap with <ul>
const $listElements = $('#myDiv script ~ li').clone().wrapAll('<ul>');

// Get HTML of <ul>
const listHTML = $listElements.parent().prop('outerHTML');
console.log(listHTML);

// Get HTML of just <li>
const itemHTML = $listElements.parent().html();
console.log(itemHTML);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="myDiv">
  <ul>
    <div id=" myInnerDiv ">Here is a div</div>
    <li id="oneLi ">One li</li>
    <script type="text/javascript ">
      // some JS code
    </script>
    <li><span class="li-item ">Some content 1</span></li>
    <li><span class="li-item ">Some content 2</span></li>
    <li><span class="li-item ">Some content 3</span></li>
  </ul>
</div>

【讨论】:

请注意,jQuery 将其称为Next Siblings Selector,实际上这听起来比 CSS 名称准确得多。 啊,谢谢!我会开始提到它,因为是的,它更有意义 如果添加.wrapAll("&lt;ul&gt;"),结果正是 OP 想要的 如何在不更新页面的情况下包装所选内容?我在想 .clone() 但不确定这是否是最好的方法 谢谢!无论如何,您也可以将第一个解决方案留在您的回答中。【参考方案2】:

假设你想要最新列表项的内容:

$("#myDiv ul li:last").text()

【讨论】:

"我要获取 @freedomn-m 显示为“预期输出”的标记足够清晰。 OP 想要在 &lt;script&gt; 元素之后的“最后一个”/三个 &lt;li&gt; 元素。

以上是关于JQuery:如何从 div 中提取 li 项目的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 如何在这段代码中获取 div?

如何从项目列表中获取特定的 jQuery 项目?

使用jquery从数据库中获得5个结果后,如何附加div?]

jquery中怎么获取li的数量

jQuery - 选择嵌套在 div ul li 中的特定按钮

Jquery如何给ul下每个li都加上点击事件