【问题标题】:What is the difference between $(this) and this$(this) 和 this 有什么区别
【发布时间】:2011-04-12 23:03:02
【问题描述】:
我有以下代码
$('a').click(function() {
var url= this.href;
alert(url);
});
这很好用,返回的结果是标签的url。
但是,如果我将上面的代码更改为
$('a').click(function() {
var url= $(this).href;
alert(url);
});
结果未定义。
有人帮我解决这个问题吗?我正在为此拼命....
【问题讨论】:
标签:
javascript
jquery
this
【解决方案1】:
很多很好的答案,只是想补充一下,你也可以这样做:
$('a').click(function(e) {
alert($(this)[0].href);
});
【解决方案2】:
区别在于 DOM 元素和 jQuery 选择。
您上面给出的代码中的“this”是对链接的 DOM 元素的引用。 $(this) 基于仅包含该链接的 DOM 元素创建一个 jQuery 选择。
jQuery 选择会以牺牲一点性能为代价为您提供不同的功能。您的链接元素具有 href 属性(即您可以通过 this.href 访问的属性),而 jQuery 选择具有所有正常的 jQuery 属性和方法。
对于获取链接目标,this.href 绝对是要走的路。它更简单、更快、更简洁。
【解决方案3】:
这是因为您在第一个示例中使用了 javascript DOMElement,在第二个示例中使用了 jQuery 对象。 jQuery 对象包裹着 DOMElement 并为您提供了许多功能。
您可以通过以下方式访问网址:
$('a').click(function() { var url= $(this).attr('href'); alert(url); });
【解决方案4】:
this 在你的情况下是实际的 dom 元素,所以锚标签
$(this) 是一个 jquery 对象,它用 jquery 的所有优点包装了该 dom 元素。
所以 .href 不是那个 jquery 对象的属性,而是 dom 对象的属性。
您可以使用$(this).attr('href') 使用 jQuery 对象来实现相同的目的。
【解决方案5】:
$(this) 创建一个包装 this 的 jQuery 对象。原生 DOM 对象有一个 href 属性,但 jQuery 没有。
$(this).attr("href") 可以工作。