鉴于以下代码,为什么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
答案 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