【问题标题】: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);
});

【讨论】:

  • 这里不解释$(this)this的区别。
【解决方案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") 可以工作。

        【讨论】:

          猜你喜欢
          • 2010-11-06
          • 1970-01-01
          • 2013-08-09
          • 1970-01-01
          • 2011-04-10
          • 2013-05-26
          • 2012-10-06
          • 2016-11-14
          相关资源
          最近更新 更多