2013-05-13 116 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

相关问题