2010-03-29 5 views
2

나는 자바 스크립트 멍청한 놈입니다.Javascript DOM howto?

div.box의 두 번째 'p'요소를 선택하고 싶습니다. 어떻게해야합니까?

고맙습니다. 톰

답변

1

을 jQuery를 사용하지 않고, 기본적인 방법은 DOM 요소에 고유 ID를 연결하는 것입니다() 메소드에서 getElementById를 통해 액세스 할

<p id="second_p_elmt"> [...] </p> 

다음 :

<script ...> 
    var second_p_elmt = document.getElementById('second_p_elmt'); 
</script> 
+1

내가 당신과 동의 : 가장 최근의 브라우저에서

은 (즉, IE> = 8,> = 3.5 FF는 최근 오페라와 사파리> 3) 당신은 또한이 간단한 조각을 사용할 수 있습니다. 이드를 붙이기가 쉽지 않습니다. 그런 다음 새 단락을 삽입하면 이것이 세 번째 단락이되며 DOM 트래버스는 모두 중단되지 않습니다. –

4

으로 클래스 상자에 div의 두 번째 p 요소를 얻으려면 다음을 입력하십시오.

var paragraph = null; 
var divs = document.findElementsByTagName('div'); 
for (var i = 0; i < divs.length; i++) { 
    var div = divs[i]; 
    if (div.class == 'box') { 
     var paragraphs = div.getElementsByTagName('p'); 
     if (paragraphs.length > 1) 
      paragraph = paragraphs[1]; 
     break; 
    } 
} 

문단은 paragraph 변수에 있습니다 (발견되지 않으면 null). 당신이 그런 jQuery으로 도서관이 훨씬 쉽게 할 수 그러나

:

var paragraph = $('div.box p:eq(1)'); 
+0

jQuery에서는 DOM 노드를 구체적으로 선택해야한다 :'$ ('div.box p : eq (1)') .get (1)'. 그렇지 않으면, 당신은 jQuery 객체를 얻습니다. 그리고 그것은 말 그대로 모든 DOM 인터페이스가 부족합니다. – Boldewyn

+1

실제로 .get (0) 또는 단지 [0]으로 p : eq (1)이 이미 두 번째 단락을 선택했기 때문에. –

1
<script type="text/javascript"> 
    var boxElem = document.getElementById('box'), 
     pElems = boxElem.getElementsByTagName('p'), 
     whatYouWant = pElems[1]; // [1] is the second element in the response from getElementsByTagName 
</script> 
+0

죄송합니다 - 질문을 잘못 읽었습니다. 이 대답은 "div # box p [1]"에 적용됩니다. – David

0

당신은 몇 가지 옵션이 있습니다. 위에서 설명한 것처럼 jQuery 나 프로토 타입과 같은 훌륭한 프레임 워크 중 하나를 사용할 수 있습니다. 또는 <p/>에 ID를 부여하면 document.getElementById()으로 간단하게 사용할 수 있습니다.

그런 다음 reko_t가 지적했듯이 긴 DOM 통과 코드를 작성해야합니다 (JS 프레임 워크를 다른 곳에서 사용하지 않는 경우이 작업에만 사용하는 것이 바람직 함).

var p = document.querySelectorAll("div.box p"); 
+0

@Boldewyn :'querySelector'와'querySelectorAll'는 모두 IE8에서 지원됩니다. 사실, IE8은 Firefox 이전 버전이었습니다 (2009 년 6 월 3 일) –

+0

@Andy E : 지적 해 주셔서 감사합니다. 그러나, 당신이 지원 전화 : http://ejohn.org/blog/selectors-api-test-suite-in-ie8/? 그러나, 당신은 요점을 가지고, 나는 대답을 수정합니다. – Boldewyn