2012-02-20 108 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