1

.tagName属性是否适用于直接元素?我一直在使用子元素作为起点让它工作,但我不能让它在直接元素上工作。


这是一个有效的示例:

HTML

<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<div>
    <p id="foo">This is paragraph 5.</p>
</div>

JavaScript

(function(){

var el = document.getElementById("foo");

    var name = el.parentNode.tagName;

    alert(name);

}());

这让我得到了 div 元素的名称,这就是我想要实现的,但是有没有更短的方法?

我不想为元素添加标识符并以这种方式定位它,这是因为我不想在我的 HTML 文档中添加不必要的标记。这是一个有效的示例,但依赖于标识符。


HTML

<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<div id="bar">
   <p id="foo">This is paragraph 5.</p>
</div>

JavaScript

(function(){

var el = document.getElementById("bar");

    var name = el.tagName;

    alert(name);

}());

如您所见,这获得了预期的效果,但依赖于标识符。所以我想:“我不能.tagName在元素本身上使用属性并用 定位元素.getElementsByTagName()吗?”


HTML

<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<div>
    <p id="foo">This is paragraph 5.</p>
</div>

JavaScript

(function(){

var el = document.getElementsByTagName("div");

    var name = el.tagName;

    alert(name);

}());

答案是不。这让我得到了undefined. 为什么是这样?有人有解决方案吗?
链接到 jsFiddle:http: //jsfiddle.net/BV5EP/

4

2 回答 2

4

请记住,getElementsbyTagName(注意复数s)返回 anodeList而不是Element(就像这样getElementById做)。你需要确保使用el[0].tagName

Corrected Fiddle

于 2013-11-09T22:23:27.970 回答
1

这给我一个未定义的值。为什么是这样?

因为 getElementsByTagName 返回的 NodeList 没有 tagname 属性。

有人有解决方案吗?

您必须按索引访问 NodeList 包含的元素——el[0].tagName在这种情况下,如果您只想访问第一个(或唯一一个)div 元素。

于 2013-11-09T22:23:49.050 回答