嵌套每个循环会导致问题
您好 - 我的问题最好用预期输出和实际输出来总结。使用以下 HTML 和 JS 代码知道为什么要这样做吗?
HTML 代码:
<h3>CATEGORY 1</h3>
<p>Item 1</p>
<p>Item 2</p>
<h3>CATEGORY 2</h3>
<p>Item 3</p>
<p>Item 4</p>
<h3>CATEGORY 3</h3>
<p>Item 5</p>
<p>Item 6</p>
JavaScript / jQuery 代码:
$(".h3").each(function () {
// Display H3 Text
console.log($(this).text());
$(this).siblings('p').each(function () {
if ( $(this).next().is('h3') ) {
// Display Last Paragraph Text Before <H3>
console.log($(this).text());
// Break the Each Loop, Go to next H3
return false;
}
else {
// Display Paragraph Text
console.log($(this).text());
}
});
});
预期输出:
CATEGORY 1
Item 1
Item 2
CATEGORY 2
Item 3
Item 4
CATEGORY 3
Item 5
Item 6
真实(非预期)输出:
CATEGORY 1
Item 1
Item 2
CATEGORY 2
Item 1
Item 2
CATEGORY 3
Item 1
Item 2
谢谢。
Hello – My question is best summarize with the intended output and the real output. Any clue why it's doing this, using the following HTML and JS code?
HTML Code:
<h3>CATEGORY 1</h3>
<p>Item 1</p>
<p>Item 2</p>
<h3>CATEGORY 2</h3>
<p>Item 3</p>
<p>Item 4</p>
<h3>CATEGORY 3</h3>
<p>Item 5</p>
<p>Item 6</p>
JavaScript / jQuery Code:
$(".h3").each(function () {
// Display H3 Text
console.log($(this).text());
$(this).siblings('p').each(function () {
if ( $(this).next().is('h3') ) {
// Display Last Paragraph Text Before <H3>
console.log($(this).text());
// Break the Each Loop, Go to next H3
return false;
}
else {
// Display Paragraph Text
console.log($(this).text());
}
});
});
Intended Output:
CATEGORY 1
Item 1
Item 2
CATEGORY 2
Item 3
Item 4
CATEGORY 3
Item 5
Item 6
Real (Unintended) Output:
CATEGORY 1
Item 1
Item 2
CATEGORY 2
Item 1
Item 2
CATEGORY 3
Item 1
Item 2
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
因为
siblings()
选择所有兄弟姐妹,所有先前的和所有后续的。我认为你需要nextAll()
:演示
给出:
Because
siblings()
selects all siblings, all previous and all following. I think you neednextAll()
:Demo
gives:
如果最后一个
元素之后没有更多兄弟姐妹,我想我会使用
.nextUntil('h3')
代替:如果您愿意,您甚至可以在不显式调用 <代码>.each()
If there are no more siblings after the last
<p>
element, I guess I'd use.nextUntil('h3')
instead:If you wanted, you could even do it without the explicit calls to
.each()
.siblings()
函数并不意味着“后续兄弟姐妹”,而是意味着“所有兄弟姐妹”。前两个标记是所有
标记的同级标记。
The
.siblings()
function does not mean "subsequent siblings", it means "all siblings." The first two<p>
tags are siblings of all the<h3>
tags.尝试使用 nextAll() 而不是siblings()。
Try using nextAll() instead of siblings().