Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是;这";站在这里?_Javascript_Jquery - Fatal编程技术网

Javascript 什么是;这";站在这里?

Javascript 什么是;这";站在这里?,javascript,jquery,Javascript,Jquery,鉴于代码: $(element, document).mousedown(function() { $(this).attr('id'); // get id of the element }); 如何在不使用this的情况下重写代码?没有this关键字的版本: var $element = $('#element'); $element.mousedown(function() { var id = $element.attr('id'); // i

鉴于代码:

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

});

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

没有
this
关键字的版本:

var $element = $('#element');
$element.mousedown(function() {
    var id = $element.attr('id');
        // id is now 'element'
});
这代表什么

在此上下文中,
指向当前为其定义
mousedown
属性的元素

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

在本例中,“this”指的是被单击的元素。这不是必需的,但每个元素都必须有这样的代码:

$("#button").mousedown(function(){
 $("#button").attr("id");
})

将其保留在

中要容易得多,这在JavaScript中表示函数的执行上下文。在这种情况下,jQuery将
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();
    }
});

“这”指的是功能的范围。就功能而言,这是所作用的元素。在您的代码中,操作是mousedown,因此被操作的元素是this。希望这有帮助

问题是,你不会得到比使用
这个
更有效的东西。其他所有内容或多或少都需要第二个元素查找,虽然这并不十分昂贵,但比在范围内使用对象的成本更高(
this

严格地说,这是最字面的解释:

$(element, document).mousedown(function() {
        $(element, document).attr('id'); 
});
现在,这可能没问题,但如果您的元素实际上是一个返回多个值的选择器(如类选择器),那么您将遇到问题。因此,您可能需要考虑:

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

您可以使用以下选项:

$(element, document).mousedown(function(e) {
        $(e.target).attr('id'); // Get id of the element.
});

为什么?有什么问题吗?如果问题中的
$(元素,文档)
更改为
$(选择器,上下文)
,那么这是非常相关的。你问的是一个实际错误的特殊情况:)如果#元素选择器匹配多个元素怎么办它是一个id它怎么能匹配多个id!!:/@是的,但是如果它不是一个ID而是一个类,它可以匹配多个元素。我知道#ID应该是唯一的。。但与web开发中的大多数事情一样,您不能保证这一点。此外,我们正在寻找一种通用的方法来替换它,因此应该使用一个类选择器或任何返回多个元素的东西considered@Tigraine:#element始终只选择一个元素,而不管您缺少的HTML是否不正确。“。