2012-02-20 107 views
1

希望我可以解釋得很好。我做如何抓住你抓住的元素內部的元素?

var foo = document.getElementsByTagName('bar'); 
var len = foo.length; 
for(var i=0;i<len;i++){ 
//Do stuff 
} 

裏面,對我也希望能夠得到那個埋內富[I]深的元素(特別是一類)。我的想法就像

var whatIWant = document.getElementsByClassName("name").foo[i]; 

但這似乎並不是我需要做的。我只是不確定語法,還是需要做一些完全不同的事情?

+1

我不使用Javascript;我假設你嘗試了明顯的'var whatIWant = foo [i] .getElementsByClassName(「name」);'? – 2012-02-20 00:20:22

+0

請注意,名稱「getElementsByTagName」和「getElementsByClassName」太長,所以在代碼中使用它們可能是不明智的。您可能想要使用名稱較短的更高級別的API。 – 2012-02-20 00:28:50

+0

@ŠimeVidas我明白你來自哪裏,但它是用戶每次使用它下載的獨立腳本。以我的技能來說,它會比任何一種方式都要大,但我認爲它不會包含jquery會更小。 – townie 2012-02-20 03:22:02

回答

3

你已經基本得到它:

foo = document.getElementsByTagName('bar'); 
// foo is now a nodelist of all nodes named 'bar'. 

for (i = 0; i < foo.length; i++) { 
    bar = foo[i].getElementsByClassName('baz'); 
    // bar is now a nodelist of all elements with class 'baz' in the dom tree under foo[i]. 

} 

如果你使用jQuery,它會是簡單的:

$('bar .baz').each(function() { 
    $(this). etc...; 
}); 
+0

D'oh。對。謝謝。更正了錯字 – 2012-02-20 00:24:28

+0

注意getElementsByClassName在IE8及更小版本中不可用。 http://www.quirksmode.org/dom/w3c_core.html – 2012-02-20 00:24:51

+0

微軟太糟糕了。他們已經有了15年以上的時間來推出體面的瀏覽器。事實上,IE9並沒有像以前的版本那麼糟糕,這並不妨礙我將整個IE瀏覽器線路交給垃圾堆。 – 2012-02-20 00:25:56

2

據我所知getElementsByClassName方法是HTML5(根據這個:https://developer.mozilla.org/en/DOM/document.getElementsByClassName),所以使用它意味着並不是所有的瀏覽器都會支持它。

當你從DOM搶Element,就像document.getElementsByTagName,你會得到相同的getElementsByTagName方法,所以你可以這樣做: 富[I] .getElementsByTagName(「...」) 對於收集所需的元素,那麼你可以迭代該數組並搜索匹配的類。

此外,我建議使用JavaScript庫,如jQuery或MooTools,它會讓你的生活更輕鬆。

+0

'getElementsByClassName'可以很容易地爲IE8和IE7放置。 – 2012-02-20 00:31:25

+0

所以我可以做'var bar = foo [i] .getElementsByTagName('a');'然後遍歷'bar [i]'並做'if bar [i] .className ==「whatIWant」' – townie 2012-02-20 03:14:57

+0

@ NitzanTomer,所以我嘗試了這一點,但它甚至不會拿起一個標籤。我所擁有的只是一個iframe(它獲得了很多內部生成的東西,大量的div等),我甚至嘗試過document.getElementsByTagName('a');它說長度爲零。 – townie 2012-02-20 04:03:11