Javascript QuerySelector parentNode中伪选择器的所有问题

Javascript QuerySelector parentNode中伪选择器的所有问题,javascript,dom,Javascript,Dom,我有一个这样的结构: <div> <a></a> <p></p> <p></p> </div> 我可以用p[0]抓取第一项,但我需要第一个子项(在本例中是相同的),因此我尝试了querySelectorAll,但这样做没有结果: p.forEach(function( el ) { console.log( el.parentNode.querySelectorAll('p:firs

我有一个这样的结构:

<div>
  <a></a>
  <p></p>
  <p></p>
</div>
我可以用
p[0]
抓取第一项,但我需要
第一个子项(在本例中是相同的),因此我尝试了
querySelectorAll
,但这样做没有结果:

p.forEach(function( el ) {
  console.log( el.parentNode.querySelectorAll('p:first-child') ) //=> empty
});
如果我执行
el.parentNode.querySelectorAll(“:first child”)
我得到的
不是我想要的。如何筛选数组中的第一个子项


编辑:我尝试创建一个虚拟元素,并使用克隆重新创建结构以查找我的元素,尽管它有点有效,但我不确定这是否是最好的主意…

CSS3中有一个
类型的第一个
伪类。我认为它没有得到广泛的支持。
first child
伪类是一个谓词,它选择任何类型的元素,这些元素是其父节点-子节点列表中的第一项。因为CSS3中有一个类型为
的第一个伪类。我认为它没有得到广泛的支持。
first child
伪类是一个谓词,它选择任何类型的元素,这些元素是其父节点-子节点列表中的第一项。因为

第一个孩子实际上意味着任何类型的第一个孩子。你想要的是CSS3
第一个类型的
伪类,我认为它现在没有得到广泛的支持。@Pointy,当然,我没有读过规范,这很傻。你可以把它作为答案发布。顺便说一句,对于
:第一个孩子
你可以使用
querySelector()
方法。另外,我想这也是我得到“有点效果”的原因我的另一次克隆尝试的行为。太浪费时间了…@VisioN:是的,现在我知道它的确切功能了,我认为这样会更好。
:第一个孩子实际上是指任何类型的第一个孩子。你想要的是CSS3
第一个类型的
伪类,我认为它现在没有得到广泛的支持。@Pointy,当然,我没有读过规范,这很傻。你可以把它作为答案发布。顺便说一句,对于
:第一个孩子
你可以使用
querySelector()
方法。另外,我想这也是我得到“有点效果”的原因我的另一次克隆尝试的行为。真是浪费时间…@VisioN:是的,现在我知道它的确切功能了,我认为这样会更好。哇。链接不错!。事实上,我只关心IE9+,所以这很好。伊玛,那就用吧,嘿<代码>:第一个类型
是在CSS3中声明的,也是我第一次听说它的时候。这是一个惊喜+1:)哇。链接不错!。事实上,我只关心IE9+,所以这很好。伊玛,那就用吧,嘿<代码>:第一个类型
是在CSS3中声明的,也是我第一次听说它的时候。好的惊喜是+1:)
p.forEach(function( el ) {
  console.log( el.parentNode.querySelectorAll('p:first-child') ) //=> empty
});