2013-05-13 112 views
2

我需要選擇標題是在div通過h2包裹着,所以我做這樣的事情this.getElementsByTagName('h2')哪裏,這是當前的div中是H2 - 返回當前h2元素,但是當我試圖讓innerHTMLinnerText它返回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,將會拋出異常。

+0

所以我認爲最好使用'jQuery(this).find('h2')。文字()',因爲它已經包括在內...... – Kin 2013-05-13 07:30:15

+0

@Kirix:呃,是的。你沒有說你正在使用jQuery。 :-) – 2013-05-13 07:36:20

+0

是的,但我試圖達到最佳性能,所以我可以使用疼痛js。 – Kin 2013-05-13 10:55:22

1

否,this.getElementsByTagName('h2')返回元件與標籤名h2陣列。

你必須遍歷數組並訪問要正確的元素。

1

兩件事情:

  1. 你應該捕捉真實的getElementsByTagName()返回的節點列表的第一個元素:

    var h2 = this.getElementsByTagName('h2')[0]; 
    
  2. 不同的瀏覽器使用不同的屬性來檢索標籤內容:

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

是的,你做了一個小錯誤。因爲,this.getElementByTagName('h2')將返回(標籤)的列表。

既然是你的標籤是第一要素爲[0]

可以使用

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

至於其他的答案說明的getElementsByTagName返回一個數組。

另一種選擇是使用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

相關問題