为什么jQuery选择器属性在每个()中都未定义?

时间:2012-07-10 02:41:39

标签: javascript jquery

鉴于以下代码,为什么selector属性在第一个实例中工作而在第二个实例中不起作用?它们不是jQuery对象吗?

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

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

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

3 个答案:

答案 0 :(得分: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"
});

答案 1 :(得分: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
});

但是我看不出你真正需要这样做的原因。

答案 2 :(得分:1)

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

  

这个!= $(这个)

如果你热衷于:jQuery: What's the difference between '$(this)' and 'this'?

<强>码

var tst = $('.tst');
console.log(tst.selector);
// prints '.tst'
$('.tst').each(function() {
    alert($(this).text());
});
// prints undefined