JS querySelector只有第一个没有迭代子节点的子节点

时间:2017-06-14 07:38:24

标签: javascript html css

如何使用元素querySelector选择X类型的第一个子元素,它是元素的直接后代

例如:

<div id="target">
   <span>1</span>
   <span>2</span>
   <span>3</span>
   <div>
      <span>4</span>
   </div>
</div>

我想使用querySelector仅选择目标div的第一个子SPAN。

target.querySelector('span'); // This would return all spans in target

我知道并且不想使用的其他选择:

使用CSS

#target > span

使用JS

[].filter.call(target.children, f=>{ return f.tagName == 'SPAN' })

无论如何我想使用querySelector ......

有没有办法在给定元素上调用querySelectorAll,只选择第一个子元素?

5 个答案:

答案 0 :(得分:3)

如果您想获得其父级的第一个孩子,可以使用:first-child

target.querySelector('span:first-child');

或者,如果您想要指定类型:first-of-type

,则可以使用span
target.querySelector('span:first-of-type');

参见示例:

var target = document.querySelector('span:first-of-type');
target.style.color = 'red';
<div id="target">
   <span>1</span>
   <span>2</span>
   <span>3</span>
   <div>
      <span>4</span>
   </div>
</div>

答案 1 :(得分:2)

querySelector获取与选择器匹配的第一个元素。只需使用直接后代选择器即可。你不需要任何其他伪选择器。

var target = document.querySelector("#target");
var child = target.querySelector("#target > span");

答案 2 :(得分:1)

&#13;
&#13;
var target = document.querySelector('#target > :first-of-type');
target.style.color = 'red';
&#13;
<div id="target">
   <i>1</i>
   <span>2</span>
   <b>3</b>
   <div>
      <span>4</span>
   </div>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

  

如果您仍想使用 querySelector ,为什么不使用它:

target.querySelector('#target span').first();

target.querySelector('#target span:first-child');

答案 4 :(得分:1)

在这个解决方案中,我假设你知道有多少项

你必须选择

var x = document.querySelectorAll("span");
 x[0].style.backgroundColor = "red";
 x[1].style.backgroundColor = "red";
 x[2].style.backgroundColor = "red";

结果与

相同
#target > span {
  background-color:red;
}