这里的“this”代表什么?

3

给定代码:

$(element, document).mousedown(function() {
        $(this).attr('id'); // get id of the element

});

如何在不使用this的情况下重写代码?


6
为什么?这有什么问题吗? - Pekka
如果将问题中的 $(element, document) 更改为 $(selector, context),那么这非常相关。你正在询问该特殊情况内部的内容。 - naveen
7个回答

3

THIS 代表什么意思?

在这个上下文中,this 指的是你当前正在定义 mousedown 属性的元素。

我看不出为什么不能在这里使用它。您能详细说明一下您想做什么吗?


1

没有使用 this 关键字的版本:

var $element = $('#element');
$element.mousedown(function() {
    var id = $element.attr('id');
        // id is now 'element'
});

1
其实不正确 :) 如果 #element 选择器匹配多个元素呢? ;) - Tigraine
这是一个ID,怎么可能匹配超过1个!! :/ - Baz1nga
1
@zzzz 是的,但如果它不是一个ID而是一个类,它可能会匹配多个元素。 - Pekka
我知道 #id 应该是唯一的,但在 Web 开发中,你不能保证它。此外,我们正在寻找一种通用的方法来替换它,因此应考虑类选择器或任何返回多个元素的内容。 - Tigraine
2
@Tigraine:#element 无论 HTML 是否正确,始终只选择一个元素 https://github.com/jquery/sizzle/blob/master/sizzle.js#L1148 - naveen
显示剩余2条评论

1
你可以使用以下内容:
$(element, document).mousedown(function(e) {
        $(e.target).attr('id'); // Get id of the element.
});

0
在这种情况下,“this”指的是被点击的元素。虽然不是必需的,但您需要为每个元素编写类似于此的代码:
$("#button").mousedown(function(){
 $("#button").attr("id");
})

把它留下来会更容易


你缺少了一个闭合的 " - cwallenpoole

0

在JavaScript中,this代表函数的执行上下文。在这种情况下,您可以从jQuery设置this为绑定元素受益。但是对于自编写的函数,通常会导致this指向全局对象。

如果您进入新的函数作用域,通常需要保留this,因为新函数具有新的this

例如:

$('div').each(function(index, item) {
    var that = this;
    $(this).mousedown(function() {
        //this could be something different than before 
        //so we use the that reference
        $(that).hide();
    }
});

0
问题在于,你不可能比使用this更有效率。其他所有方法都需要进行第二次元素查找,虽然不会非常昂贵,但仍然比使用作用域内的对象(this)更加耗费资源。
严格来说,这是最字面的解释:
$(element, document).mousedown(function() {
        $(element, document).attr('id'); 
});

现在,这可能还好,但如果您的元素实际上是一个返回多个值的选择器(例如类选择器),那么您将会遇到问题。因此,您可能需要考虑:

$(element, document).each( function( ind, elem ) {
    elem.mousedown( function(){ elem.attr( 'id' ); } );
} );

0
“this”指的是函数的作用域。关于函数,它是被操作的元素。在你的代码中,动作是mousedown,所以被操作的元素就是this。希望这可以帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接