2014-09-30 3 views
0

나는이 질문에 대한 답을 찾고 있습니다. 다음 스 니펫이 작동해야합니까? 이 같은 구조 자바가 getElementsByTagName의 경로를 허용합니까?

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

:

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

내 특정 문제는 개발 환경에서 작동하며 한 번 생산하지 않는 내가 메시지를 얻을 수 있다는 것입니다 "이 이름은 포함되지 않을 수 있습니다 '/' 캐릭터."

getElementsByTagName이 이와 같은 경로로 작업해야한다면이 문제의 가능한 원인에 대한 아이디어가 필요합니다.

+0

당신은'querySelectorAll ('부모 아이를 사용하여 [querySelector] (https://developer.mozilla.org/en-US/Add-ons/Code_snippets/QuerySelector) – Kippie

+0

시도에서 살펴 보셔야 손자 자녀 ')'. –

+0

@KarlenKishmiryan : 세대를 건너 뛸 수 있습니다. dystroy 또는 XPath와 같은 연산자를 사용해야합니다. – Amadan

답변

2

아니요, getElementsByTagName은 태그 이름 만 허용합니다.

그러나 당신이 CSS 셀렉터와 querySelectorquerySelectorAll를 사용할 수 있습니다

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

또는

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

좋아요. IE6에서 작동합니까? – Lyth

+0

아니요. 'querySelectorAll'은 새로운 것입니다. [this] (https://gist.github.com/chrisjlee/8960575)와 같은 폴리 폴리이 있습니다. 그것은 느려질 것입니다. – Amadan

+3

@Lyth IE6? IE6에서 아무 것도 작동하지 않습니다 ... –

1

번호 getElementsByTagName하지 자신의 경로, 태그 이름에 의해 요소를 가져옵니다. 경로에 XPath를 사용하십시오 : document.evaluate (IE, 다시, 다르게 수행) 또는 document.querySelectordocument.querySelectorAll과 함께 CSS 선택기를 사용하십시오.

-2

선택기를 사용하여 항상 jQuery를 사용하여 하위 요소 노드를 반복 할 수 있습니다.

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

jQuery가 명시 적으로 요청하지 않는 한 JavaScript 질문에 대한 해결책으로 jQuery를 제안하지 마십시오. ('querySelector'는 정답입니다.) – lxg

+0

동의합니다. 내 컨텍스트는 순수한 자바 스크립트로 제한됩니다. – Lyth