2015-01-05 28 views
1

我对JS很新颖。我有在div类中用一行获取标签JS

<div class="test-button-set"> 
    <button id="hdfs_test" class="btn btn-default btn-lg">HDFS</button> 
    <button id="hive_test" class="btn btn-default btn-lg">HIVE</button> 
    <button id="hdfs_hive_test" class="btn btn-default btn-lg">BOTH</button> 
</div> 

我想在阵列中的所有我<button>元素。我知道我可以做var j = document.getElementsByClassName("test-button-set")[0]然后做一个j.getElementsByTagName("button")来获得按钮。我想知道是否有办法在一行代码中完成所有这些工作。

+0

什么浏览器是否需要使用? –

+0

@SeanVieira尽可能多?会很好,但我知道IE浏览器有一些问题,特别是旧版本,所以我想我并不担心这个,只要它在最近使用的浏览器上工作 – Liondancer

+0

你认为你可以添加一行代码在哪里?在HTML'onload onclick'?在'脚本'标签/文件中?在按钮(我希望你不会)...? –

回答

3

假设你只需要支持old to recent browsers(不是一切恢复IE 4)你可以使用querySelectorAll

var buttons = document.querySelectorAll('.test-button-set button'); 

另外,如果你只需要拿到属于的后代按钮第一.test-button-set

var buttons = document.querySelector('.test-button-set').getElementsByTagName('button') 
3

如何生根粉呢?

var buttons = [].slice.call(document.querySelectorAll(".test-button-set > button")); 

这会给你所有需要的按键在实际的阵列,而不是一个节点列表

2

如果你想完成你正在使用的代码的两行得到同样的结果,而无需使用querySelector/querySelectorAll(这是一个很好的选择,但在一些老的浏览器不支持),你可以只链中的方法一起使用,让他们在同一行,而不是使用了一个变量,并打破他们到两个:

document.getElementsByClassName("test-button-set")[0].getElementsByTagName("but‌​ton")