javascript - jquery this 与 $(this) 甚至 $this

标签 javascript jquery

我经常看到在 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 方法而不是通常的(getAttributesetAttribute 等)。这种包装是通过 $ 函数完成的,这就是您看到 $(this) 的地方。例如:

this.getAttribute("href")
/* or */ someElement.getAttribute("href")

相同
$(this).attr("href")
/* or */ $(someElement).attr("href")

$thisthis$ 只是一个变量名。但是,做这样的作业通常是常规的

var $this = $(this);

这样做的原因是为了避免不断调用 $ 函数,因为它每次都会创建一个新的 jQuery 包装器对象,所以这有点昂贵。如果将包装元素存储在变量中,效率会略有提高。


在极少数情况下,this 可能已经是一个 jQuery 包装器。我经常遇到的情况是在编写 jQuery 插件时。在这种情况下,您可以直接执行 this.attr("id") 之类的操作,而无需先将其包装起来,因为它已经包装好了。在通常情况下(事件处理程序、$.each 等)包装器是必需的。

关于javascript - jquery this 与 $(this) 甚至 $this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719635/

相关文章:

javascript - 如何切换动画元素位置

javascript - 有没有办法扭转暂停提交表单的情况,还是一开始就不要提交会更好?

javascript - Nunjucks 迭代数组中的项目以显示对象中的项目

javascript - 如何通过JavaScript获取类的内容

javascript - 事件菜单样式的动态主体类

javascript - 显示日期时间,包括毫秒

javascript - 如果 onload 在 N 秒内没有触发,有没有办法设置 img src ?

javascript - 从 HTML 创建数组

javascript - PHP + JavaScript : What happens behind scenes when comparing empty string to 0

javascript - 追加<th>的innerhtml