我对理解这个jquery片段有点困难。特别是如果使用DOM对象或jquery对象。 这是代码
$(".foo").click(function() {
var displayTool = $(this).find(".tool-name").text() //is this a jquery object or DOM object ?
});
我的第一个问题是this
是DOM对象还是jQuery对象?我假设它是一个DOM对象,因为我们在下一个语句中通过jQuery修饰符传递它,即$(this).find(".tool-name")
以进一步从中提取数据。那是对的吗?
如果是这样,那么我的下一个问题是为什么this
是一个DOM对象?我的印象是jQuery函数总是返回jQuery对象,例如$(this).find(".tool-name")
应该返回一个jQuery对象而不是一个DOM对象。我知道我们可以从jQuery对象中提取DOM对象,但我对此并不感兴趣。我想知道为什么this
是一个DOM对象。如果我错了,请纠正我。
答案 0 :(得分:1)
是的,this
始终是jQuery点击处理程序中的DOM对象。
关于为什么这是......
您是否总是希望在单击处理程序中包含单击元素的jQuery对象?不,有时你不这样做。例如,假设您想在单击元素时从页面中删除其他元素:
$('.delete').click(function() {
$('.spinner').remove();
});
您永远不会使用this
。
或者您可能只想对元素id
执行某些操作:
$('.delete').click(function() {
console.log(this.id);
});
在这两种情况下,您都不想选择jQuery。而且由于构建jQuery选择是一项相对昂贵的操作,因此除非您通过执行$(this)
明确表示您想要它,否则最好不要创建它。
您可能会想“啊,但我们已经在原始代码行中构建了选择”:
$(".foo").click(function() {
.foo
意味着不同的东西。它表示“具有类foo
的所有元素”,而不是“刚刚单击的元素”。