JQuery:如何从 div 中提取 li 项
JQuery: How to extract li items from div
我有以下 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>
我想获取<script>
标签后最新<li>
条对应的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 达到这个目标吗?
您可以 select 使用 Next Siblings Selector (~)
在另一个元素之后的元素
您也可以使用 .nextAll()
来实现同样的效果 - $('#myDiv script').nextAll('li')
我还在返回的元素上使用了 .clone()
to safely use .wrapAll('<ul>')
而没有影响 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>
假设你想要最新列表项的内容:
$("#myDiv ul li:last").text()
我有以下 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>
我想获取<script>
标签后最新<li>
条对应的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 达到这个目标吗?
您可以 select 使用 Next Siblings Selector (~)
您也可以使用 .nextAll()
来实现同样的效果 - $('#myDiv script').nextAll('li')
我还在返回的元素上使用了 .clone()
to safely use .wrapAll('<ul>')
而没有影响 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>
假设你想要最新列表项的内容:
$("#myDiv ul li:last").text()