JQuery .nextUntil()选择标题为li

问题描述 投票:1回答:1

[我正在尝试使用.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 jquery-selectors nextuntil
1个回答
0
投票

[已更新以适合不同的代码模式]


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>,因此您可以识别最后一个部分!

© www.soinside.com 2019 - 2024. All rights reserved.