在jQuery或JavaScript中,选择与父元素相邻的子元素
我试图选择与父元素联接的子元素。例如,在下面的HTML中,我只想选择第二段和第四段的子项(在jQuery或JavaScript中,选择与父元素相邻的子元素,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我试图选择与父元素联接的子元素。例如,在下面的HTML中,我只想选择第二段和第四段的子项(strong),因为在这两种情况下,子项和父项是相邻的(即子项和父项元素之间没有文本或标记): 这是第一行 这是第二行 这是第三行 这是第四行 如果可能的话,我怎么能只用选择器来完成呢 如果可能的话,我怎么能只用选择器来完成呢 不能,因为选择器不考虑文本节点(只有元素节点)。您可以选择所有p>strong节点,并测试该节点是否为其父节点的第一个子节点: $('p > strong').filter(
strong
),因为在这两种情况下,子项和父项是相邻的(即子项和父项元素之间没有文本或标记):
这是第一行
这是第二行
这是第三行
这是第四行
如果可能的话,我怎么能只用选择器来完成呢
如果可能的话,我怎么能只用选择器来完成呢
不能,因为选择器不考虑文本节点(只有元素节点)。您可以选择所有
p>strong
节点,并测试该节点是否为其父节点的第一个子节点:
$('p > strong').filter(function() {
return this === this.parentNode.firstChild;
});
但是,只有当父节点确实没有任何其他节点作为第一个子节点时,这才起作用,甚至连只有空格的文本节点也没有。即,在以下情况下,此方法不会选择strong
:
<p>
<strong>This is line</strong> number four
</p>
为了简化筛选条件,我使用了
strong:n子元素(1)
,如果它是其父元素的第一个子元素,它将只选择一个strong
元素。您可以使用筛选方法:
$('p > strong').filter(function(){
return !this.previousSibling;
});
感谢您提供的简明解决方案。感谢您的解释和示例。
$('p > strong:nth-child(1)').filter(function() {
var firstChild = this.parentNode.firstChild;
return firstChild === this ||
firstChild.nodeName === 'TEXT' && !$.trim(firstChild.nodeValue);
});
$('p > strong').filter(function(){
return !this.previousSibling;
});