来自jQuery选择器的jQuery对象

时间:2013-02-17 23:50:52

标签: jquery dom jquery-selectors

我是jQuery的新手,所以如果我的方向错误,请告诉我。

我有一个函数,它将“jQuery对象”作为参数,如下所示:

function protectImageFromRightClick(image_object) {
 // yeah ok i know this is only a dumb protection!!

    image_object.bind('contextmenu', function(e) {
        return false;
    }); 

    image_object.mousedown(function(){
        return false; // for prevent drag
    });
}

我想在选择时调用它。我试图用each()调用它:

$( ".photo" ).each(function (i) {
    protect(this);
});

但是this似乎是指没有任何.bind()方法的DOM对象..我不太清楚如何解决这个问题......任何想法?

表面上是我在代码中的其他地方使用该功能,所以解决方案如下:

$('some selection').bind()

不是一个好的解决方案,因为这样我只会写代码重复..

5 个答案:

答案 0 :(得分:6)

使用JQuery,您必须使用$(this)而不是this关键字。

答案 1 :(得分:2)

使用选择器调用jQuery函数时,它会完成一些任务。首先,它构造jQuery对象。然后,它将jQuery API附加到新构造的对象。然后,它构造一个与选择器匹配的DOM元素数组。

当您在jQuery对象上使用each时,或者当您在回调闭包内时,this关键字将引用jQuery正在处理的当前DOM元素。

简而言之,

$( ".photo" ).each(function (i) {
    //this == the current element with class="photo"
    //$(this) == a jquery object instanced with an 
    //           array of elements containing only the 
    //           current element with class="photo" that 
    //           each is working with
});

答案 2 :(得分:1)

如果你用每个迭代,那么每次迭代,都会调用回调, 参数(i)是你的元素。

喜欢

的java:

Vector<Integer> photo = new Vector<>();
photo.add(2); //ok very constructed..
for(int v:photo){
 // here v is your iteration variable
}

JS:

$( ".photo" ).each(function (k,v) {
    protect(v);
});

然而,v现在是纯js,而不是jQuery, 所以你可以使用:

$( ".photo" ).each(function (k,v) {
    protect($(v));
});

如果你想知道k在这里是什么:k代表键,v代表值。 在数组中,这可能很简单,k是0,1,2,... 但这也适用于像{"k1":"v1","k2":"v2"}

这样的对象

答案 3 :(得分:0)

您可以随时检查函数中的jQuery对象,并在必要时进行转换,例如

if (!image_object instanceof $) {
    image_object = $(image_object);
}

答案 4 :(得分:0)

.each方法将this设置为实际的DOM对象,您可以通过用另一个$()

包装它来将该DOM对象转换为jQuery对象
$(".photo").each(function () {
    protect($(this));
});