2014-09-30 58 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