2012-07-10 34 views
1

給定以下代碼,爲什麼selector屬性在第一個實例中工作,而不是第二個?他們不都是jQuery對象嗎?爲什麼jQuery的選擇器屬性undefined在每個()?

<span class='tst'>span</span>​ 

var tst = $('.tst'); 
console.log(tst.selector); 
// prints '.tst' 

$('.tst').each(function() { console.log(this.selector);}); 
// prints undefined​​​​​​​ 

回答

5

this,在.each()環的情況下,不是一個jQuery對象,所以selector屬性是未定義的。

你需要使它一個jQuery對象第一:$(this).selector

但是,應該注意的是,selector屬性將返回一個空字符串,而.each()循環中。

編輯

如果你絕對需要.each()selector屬性,一個選擇是將緩存您的選擇:

var cached = $('.tst'); 

cached.each(function() { 
    console.log(cached.selector); // Will display ".tst" 
}); 

+0

+1確實如此'')'' – 2012-07-10 02:49:23

+0

是的,我試過用$(this),但得到了空字符串。有什麼辦法可以獲得每個()內的文本? – mix 2012-07-10 02:54:10

+0

@mix:是的,如果你想要每個元素的文本,使用'.text()'。我會更新我的答案。 – 2012-07-10 02:55:15

2

this != $(this)

在你第一種情況tst是對jQuery對象的引用,但在第二個this中只是對應的DOM元素。

但在.each()循環內,.selector屬性不可用。要訪問'.tst',你可以做$(this).attr("class")(當你使用類選擇器的時候) - 雖然如果你已經在每個類中使用它,你可以事先將它緩存在一個變量中。

請注意,這將返回該元素的所有類,因此如果它具有多個元素,則可以稍後解析它。

根據您的具體描述最好的解決方法是這樣的:

var $tst = $(".tst"); 
$tst.each(function() { 
    console.log($tst.selector); //prints .tst 
}); 

不過,我看不出有任何理由你真的需要做到這一點。 !

+0

+1確實!innit':)' – 2012-07-10 02:46:37