2013-05-13 2 views
2

나는 h2 래핑 div에 제목을 선택해야합니다, 그래서 내가하는 H2는이 현재의 사업부 인이 this.getElementsByTagName('h2') 같은 것을 할 - 그것은 현재 h2 요소를 반환합니다,하지만 난 innerHTML를 얻으려고 노력하거나 innerText에게이 널 (null)을 반환 할 때 . 내가 도대체 ​​뭘 잘못하고있는 겁니까?요소에서 태그 이름으로 텍스트를 선택하는 방법은 무엇입니까?

답변

3

현재 h2 요소를 반환하지만 innerHTML 또는 innerText를 얻으려고하면 null을 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

getElementsByTagName은 요소가 아니라 NodeList을 반환합니다. 목록은 innerHTML을 가지고 있지만 않습니다의 요소, 예를 들어 각하지 않습니다

var list = this.getElementsByTagName('h2'); 
if (list[0]) { 
    title = list[0].innerHTML; 
} 

을 또는 당신이 존재하는 것을 확인라면 :

title = this.getElementsByTagName('h2')[0].innerHTML; 

을 ...하지만 h2가 발견되지 않으면 예외가 throw됩니다.

+0

그래서 'jQuery (this) .find ('h2 ')를 사용하는 것이 더 좋습니다.text()'가 이미 포함되어 있기 때문에 ... – Kin

+0

@Kirix : 어, 네. jQuery를 사용하고 있다고 말하지 않았다. :-) –

+0

네,하지만 최고의 성능을 얻으려고 노력하고 있습니다. 가능한 곳에서는 pain js를 사용합니다. – Kin

1

아니요, this.getElementsByTagName('h2')은 태그 이름이 h2 인 요소 배열을 반환합니다.

배열을 반복하여 원하는 요소에 액세스해야합니다.

1

두 가지 :

var h2 = this.getElementsByTagName('h2')[0]; 
  • 다른 브라우저에서 태그 내용을 검색하기 위해 다른 속성을 사용하여 : :

    1. 당신은 getElementsByTagName()에 의해 반환 된 노드 목록의 첫 번째 요소를 캡처해야

      var title = h2.textContent || h2.innerText || null; 
      
  • 0

    예, 당신은 약간의 실수를했습니다. 왜냐하면 this.getElementByTagName('h2')이 (태그 중) 목록을 반환하기 때문입니다. 태그 인

    는 다른 답변이 getElementsByTagName가 배열을 반환 상태로서 당신은

    var v= this.getElementsByTagName('h2'); 
    var yourdata=v[0].innerHTML; 
    
    0

    을 사용할 수 있습니다 [0]

    으로 첫 번째 요소입니다.

    또 다른 옵션은이 페이지에 querySelector 실행

    는 다음과 같은 수 있습니다 (그래서 먼저 지원하기 위해 필요한 확인 최신 브라우저에서만 지원) querySelector을 사용하는 것입니다 : -

    window.document.querySelector('h1').innerHTML //#> 
    "<a href="https://stackoverflow.com/questions/16516643/how-to-select-text-by-tag-name-in-element" class="question-hyperlink">How to select text by tag name in element?</a>" 
    

    querySelector

    querySelectorAll

    관련 문제