1

给定以下代码,为什么选择器属性在第一个实例中起作用,而在第二个实例中不起作用?它们不是 jQuery 对象吗?

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

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

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

3 回答 3

5

this,在.each()循环的上下文中,不是 jQuery 对象,因此该selector属性是未定义的。

您需要先使其成为 jQuery 对象:$(this).selector

但是,应该注意的是,该selector属性将在.each()循环内返回一个空字符串。

编辑

如果您绝对需要 中的selector属性.each(),一种选择是缓存您的选择器:

var cached = $('.tst');

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

​</p>

于 2012-07-10T02:42:50.997 回答
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
});

但是我看不出你真的需要这样做的任何理由。

于 2012-07-10T02:43:06.070 回答
1

工作演示 http://jsfiddle.net/wA6Yv/ http://jsfiddle.net/a3CYR/2/

这!= $(这个)

如果你热衷:jQuery:'$(this)' 和 'this' 之间有什么区别?

代码

var tst = $('.tst');
console.log(tst.selector);
// prints '.tst'
$('.tst').each(function() {
    alert($(this).text());
});
// prints undefined
于 2012-07-10T02:46:18.187 回答