我需要帮助。nextUntil()
我对 jQuery 的方法有奇怪的问题。它没有像我预期的那样工作......
我的 HTML 中有两个注释标签,它们分隔了我感兴趣的元素以及我想要进入 jQuery 集合的元素。为此,我首先找到两个评论节点,并应用nextUntil
第一个,提供第二个作为参数。但nextUntil
返回所有跟随第一条评论的孩子,似乎忽略了我传递给它的论点。
我怎样才能防止这种情况发生,并且只得到两条评论之间的孩子?
这是我的代码:
HTML:
<ul>
<li>1</li>
<li>2</li>
<!-- from -->
<li>3</li>
<li>4</li>
<!-- to -->
<li>5</li>
<li>6</li>
</ul>
JavaScript:
const fromSign = 'from'
const toSign = 'to'
// filter callback - return only comment
// element with specific text
function commentWith (elm, txt) {
return elm.nodeType === 8 &&
elm.nodeValue.trim() === txt
}
// Step - 1 find comment with "from"
// text and save returned element
const $start = $('ul').contents().filter(
(idx, elm) => commentWith(elm, fromSign)
)
// Find comment with "to"
// text and save returned element
const $stop = $('ul').contents().filter(
(idx, elm) => commentWith(elm, toSign)
)
console.info($start, $stop) // So far, so good
// Step 2 - find all elements
// between "from" and "to" comments
let $inner = $start.nextUntil($stop)
// Not works - inner contains elements
// beyond "to" comment
console.log($inner)
// Step 2 again - find all elements
// between "from" and "to" comments
// with "redundant" prev/next
$inner = $start.nextUntil($stop.prev().next())
// OK, just li 3 and 4,
// but why? What am I missing?
console.log($inner)
PS:如果您使用<div class="from">
and<div class="end">
或其他元素来选择开始和结束,nextAll()
则按预期工作。但是,我想使用注释来标记选择......
我尝试使用prev
/ next
“hacks”作为替代方案(另请参见上面的代码),但是当注释标记之前和/或之后没有元素时,它们的表现不佳。