2

我需要选择被div包装的标题h2,所以我做这样的事情this.getElementsByTagName('h2'),这是当前的 div,其中是 h2 - 它返回当前h2元素,但是当我尝试获取innerHTMLinnerText返回 null 时。我究竟做错了什么?

4

5 回答 5

3

它返回当前的 h2 元素,但是当我尝试获取 innerHTML 或 innerText 时,它返回 null。我究竟做错了什么?

getElementsByTagName返回 a NodeList,而不是元素。该列表没有innerHTML,但它的每个元素都有,例如:

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

或者,如果您确定它会存在:

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

...但是如果没有找到 h2,那将引发异常。

于 2013-05-13T07:17:11.100 回答
1

两件事情:

  1. 您应该捕获由返回的节点列表的第一个元素getElementsByTagName()

    var h2 = this.getElementsByTagName('h2')[0];
    
  2. 不同的浏览器使用不同的属性来检索标签内容:

    var title = h2.textContent || h2.innerText || null;
    
于 2013-05-13T07:21:37.600 回答
1

不,this.getElementsByTagName('h2')返回带有标签 name 的元素数组h2

您必须迭代数组并访问所需的正确元素。

于 2013-05-13T07:17:07.973 回答
0

正如其他答案状态 getElementsByTagName 返回一个数组。

另一种选择是使用 querySelector (仅现代浏览器支持,因此请先检查您需要支持的内容)

在此页面上运行 querySelector 会给出以下结果:-

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

查询选择器

查询选择器全部

于 2013-05-13T07:22:52.293 回答
0

是的,你犯了一个小错误。因为 ,this.getElementByTagName('h2')会返回一个列表(标签)。

作为你的标签是第一个元素[0]

您可以使用

var v= this.getElementsByTagName('h2');
var yourdata=v[0].innerHTML;
于 2013-05-13T07:22:02.433 回答