2014-09-30 60 views
0

我一直在寻找这个问题的答案:下面的代码段应该工作吗?Javascript是否接受getElementsByTagName中的路径

getElementsByTagName("parent/child/grand-child"); 

对于这样的结构:

<parent> 
    <child> 
    <grand-child></grand-child> 
    </child> 
</parent> 

我的具体问题是,它在开发环境,而一旦在生产中不和我得到的消息“这个名字可能不包含'/'字符。“

如果getElementsByTagName应该像这样的路径,我需要关于这个问题的一个可能的原因的想法。

+0

你应该看看[querySelector(https://developer.mozilla.org/en-US/Add-ons/Code_snippets/QuerySelector) – Kippie 2014-09-30 07:46:11

+0

尝试使用'querySelectorAll(“父子grand-孩子')'。 – 2014-09-30 07:46:46

+0

@KarlenKishmiryan:这可以跳过一代人。应该使用像'dystroy'或XPath这样的'>'运算符。 – Amadan 2014-09-30 07:48:20

回答

2

不,getElementsByTagName只接受标签名称。

但是你可以使用querySelectorquerySelectorAll用CSS选择器:

var element = document.querySelector("parent child grand-child"); 

var elements = document.querySelectorAll("parent > child > grand-child"); 
+0

太好了。这在IE6中工作吗? – Lyth 2014-09-30 07:49:22

+0

没有。 'querySelectorAll'是新鲜的。有一些polyfills,像[this](https://gist.github.com/chrisjlee/8960575)。这将是缓慢的。 – Amadan 2014-09-30 07:51:52

+3

@Lyth IE6? IE6上没有任何功能... – 2014-09-30 07:52:35

1

getElementsByTagName通过标签名称得到的元素,而不是他们的道路。对于路径使用XPath:document.evaluate(IE,再次,做不同),或使用document.querySelectordocument.querySelectorAll的CSS选择器。

-2

您始终可以使用jQuery通过使用选择器遍历子元素节点。

var elem = $("parent > child > grand-child"); 
+3

请不要将jQuery作为JavaScript问题的解决方案,除非明确要求jQuery。 ('querySelector'是这里的正确答案。) – lxg 2014-09-30 08:01:38

+0

我同意,我的上下文仅限于纯javascript。 – Lyth 2014-09-30 08:24:20