给定以下代码,为什么选择器属性在第一个实例中起作用,而在第二个实例中不起作用?它们不是 jQuery 对象吗?
<span class='tst'>span</span>
var tst = $('.tst');
console.log(tst.selector);
// prints '.tst'
$('.tst').each(function() { console.log(this.selector);});
// prints undefined
给定以下代码,为什么选择器属性在第一个实例中起作用,而在第二个实例中不起作用?它们不是 jQuery 对象吗?
<span class='tst'>span</span>
var tst = $('.tst');
console.log(tst.selector);
// prints '.tst'
$('.tst').each(function() { console.log(this.selector);});
// prints undefined
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>
this != $(this)
在您的第一种情况下tst
是对 jQuery 对象的引用,但在第二种this
情况下只是相应的 DOM 元素。
但是,在.each()
循环中, .selector 属性不可用。要访问“.tst”,您可以这样做$(this).attr("class")
(当您使用类选择器时)——尽管如果您已经在每个中使用它,您可以事先将它缓存在一个变量中。
请注意,这将返回该元素的所有类,因此如果它有多个类,您可以稍后对其进行解析。
根据您的确切描述,最好的解决方法是:
var $tst = $(".tst");
$tst.each(function() {
console.log($tst.selector); //prints .tst
});
但是我看不出你真的需要这样做的任何理由。
工作演示 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