2012-08-16 98 views
4

我想获取元素的子标记名。获取元素的子标记名

HTML:

<div class="element"> 
    <h1>title</h1> 
</div> 
<div class="element"> 
    <img src="http://2.bp.blogspot.com/-ma66w8WJsZ0/UBVcmt3XS4I/AAAAAAAAAWw/4UyVd2eR8A0/s1600/olympic-logo.thumbnail.jpg" /> 
</div> 
<div id="debugger"></div> 

的jQuery:

$(".element").bind("click", function(){ 

    var child = $(this).add("first-child").prop("tagName"); 

    $("#debugger").html(child); 

});​ 

我不明白为什么我总是得到DIV的结果...

谢谢。

http://jsfiddle.net/8Xg3G/2/

+0

的可能重复(http://stackoverflow.com/questions/1532331/can-jquery-provide-the-tag-name) – 2012-08-16 12:54:42

回答

8
$(this).children()[0].tagName 

OR

$(this).children().first().prop('tagName'); 

.add()用于新的元素添加到jQuery对象数组,但你正在试图获得一个现有元素的标记名称。所以,你需要一些getter方法。


使用JavaScript

this.firstChild.tagName 

OR

this.childNodes[0].tagName 

全码

$(".element").bind("click", function(){ 
    var child = $(this).children().first().prop('tagName'); 
    $("#debugger").html(child); 
}); 

DEMO

+1

如果你打算使用数组符号来获取原始DOM元素,是不是'.first()'冗余? – jackwanders 2012-08-16 12:56:43

+1

感谢您编辑您的答案与我的答案相同。 – jackwanders 2012-08-16 13:10:18

+0

@jackwanders'1 + 1 = 2'对每个人都是一样的。谢了哥们。 – thecodeparadox 2012-08-16 13:19:53

4

.add将一个元素添加到当前的jQuery集合,在这种情况下,$(this)$(this)包含div,当您运行.prop('tagName')时,jQuery将返回集合中第一个元素的标签名称,因此您会得到“div”。

尝试.children代替:

var child = $(this).children().eq(0).prop("tagName"); 
2

尝试:

var child = $(this).children(":first"); 

这将得到this的第一个孩子。

很确定.prop('tagName')只适用于jQuery 1.6+。

1

可以使用event对象的target性能,请尝试以下操作:?可提供的jQuery标签名称]

$(".element").bind("click", function(event){ 
    var target = event.target.localName; // or event.target.tagName; 
    $("#debugger").html(target); 
}); 

Fiddle

+0

在IE8/IE7上不起作用 – vpascoal 2012-08-16 14:31:15