Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jQuery或JavaScript中,选择与父元素相邻的子元素_Javascript_Jquery_Jquery Selectors - Fatal编程技术网

在jQuery或JavaScript中,选择与父元素相邻的子元素

在jQuery或JavaScript中,选择与父元素相邻的子元素,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我试图选择与父元素联接的子元素。例如,在下面的HTML中,我只想选择第二段和第四段的子项(strong),因为在这两种情况下,子项和父项是相邻的(即子项和父项元素之间没有文本或标记): 这是第一行 这是第二行 这是第三行 这是第四行 如果可能的话,我怎么能只用选择器来完成呢 如果可能的话,我怎么能只用选择器来完成呢 不能,因为选择器不考虑文本节点(只有元素节点)。您可以选择所有p>strong节点,并测试该节点是否为其父节点的第一个子节点: $('p > strong').filter(

我试图选择与父元素联接的子元素。例如,在下面的HTML中,我只想选择第二段和第四段的子项(
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;
});