我经常看到在 jquery 中使用关键字 this
的例子。有时我看到它与 $ 和括号一起使用,有时则没有。我想我看到它与每一种一起使用。
所以,
var id = this.attr('id');
var id = $(this).attr('id');
var id = $this.attr('id');
这些都是一样的吗?有首选方法吗? this
是 javascript 的东西而 $(this)
是 jQuery 的东西吗?如果是这样,$this
落在哪里?
我知道这可能是一个完全新手的问题,但我无法让简单的 this
本身发挥作用。我只能让 $(this)
工作。我不确定我是否做错了什么,或者我是否一直在阅读带有拼写错误的示例。
最佳答案
this
是 JavaScript 的东西。它指的是函数在其中运行的“上下文”。对于大多数事件处理程序,它是正在监听事件的(“原始”)DOM 元素。在其他情况下,它意味着其他事情;在 JavaScript 中搜索“this
”可能会有所启发。
我说它是“原始”DOM 元素,因为 jQuery 通常用于在 jQuery 包装器中包装普通 DOM 元素,因此您可以使用像 attr
这样的 jQuery 方法而不是通常的(getAttribute
、setAttribute
等)。这种包装是通过 $
函数完成的,这就是您看到 $(this)
的地方。例如:
this.getAttribute("href")
/* or */ someElement.getAttribute("href")
与
相同$(this).attr("href")
/* or */ $(someElement).attr("href")
$this
或 this$
只是一个变量名。但是,做这样的作业通常是常规的
var $this = $(this);
这样做的原因是为了避免不断调用 $
函数,因为它每次都会创建一个新的 jQuery 包装器对象,所以这有点昂贵。如果将包装元素存储在变量中,效率会略有提高。
在极少数情况下,this
可能已经是一个 jQuery 包装器。我经常遇到的情况是在编写 jQuery 插件时。在这种情况下,您可以直接执行 this.attr("id")
之类的操作,而无需先将其包装起来,因为它已经包装好了。在通常情况下(事件处理程序、$.each
等)包装器是必需的。
关于javascript - jquery this 与 $(this) 甚至 $this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719635/