2012-08-16 120 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