[我正在尝试使用.nextUntil()来选择h2标签下的所有h3标签,即使在页面的ul或ol中也是如此。
HTML标记类似于:
<h2></h2>
<h3></h3>
<h3></h3>
<h3></h3>
<h2></h2>
<h3></h3>
<h3></h3>
<h3></h3>
<h2></h2>
<ol>
<li>
<h3></h3>
</li>
<li>
<h3></h3>
</li>
<li>
<h3></h3>
</li>
</ol>
Js像:
var h2s = $('h2').toArray();
var h3s = [];
for (i = 0, i < h2s.length, i++){
h3s.push($('h2').eq(i).nextUntil('h2', 'h3, li h3').toArray());
};
console.log(h3s);
预期输出是:
h3s[
0: (3) [h3, h3, h3]
1: (3) [h3, h3, h3]
2: (3) [h3, h3, h3]
]
而实际输出是:
h3s[
0: (3) [h3, h3, h3]
1: (3) [h3, h3, h3]
2: []
]
[已更新以适合不同的代码模式]
jQuery .nextUntil()需要分隔符(例如您示例中的<h2>
)。因此,将不会处理嵌套<h3>
元素的HTML代码的最后一部分。首先,因为结尾没有<h2>
。其次,因为他们不是兄弟姐妹。
[使用您的代码,我只添加了条件推送,在此首先检查<h3>
是否为下一个元素。
var h3s = [];
i=0;
$( "h2" ).each( function( index, element ){
if($(this).next('h3').length>0){
if($(this).is('h2:last-of-type')){
h3s.push($('h2').eq(i).nextUntil('section').toArray());
} else {
h3s.push($('h2').eq(i).nextUntil('h2').toArray());
} } else{
h3s.push($('h2').eq(i).nextUntil('h2').find('h3').toArray());
}
i++;
});
console.log(h3s);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2></h2>
<h3></h3>
<h3></h3>
<h3></h3>
<h2></h2>
<ol>
<li>
<h3></h3>
</li>
<li>
<h3></h3>
</li>
<li>
</li>
</ol>
<h2></h2>
<h3></h3>
<h3></h3>
<h3></h3>
<section>
PS:请注意,我在此处出于演示目的删除了最后一个<h3>
,因此您可以识别最后一个部分!