2015-01-05 50 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")