【问题标题】:jQuery object from jQuery selector来自 jQuery 选择器的 jQuery 对象
【发布时间】:2013-02-02 08:46:30
【问题描述】:

我是 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()

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

【问题讨论】:

  • 然而,javascript 并不打算采用诸如防止右键单击之类的功能。请注意,用户可以轻松关闭 javascript。

标签: jquery dom jquery-selectors


【解决方案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 代表 key,v 代表 value。 在数组中,这可能很简单,k 是 0,1,2,... 但这也适用于 {"k1":"v1","k2":"v2"} 等对象

【讨论】:

  • 您的编辑使您在说什么更清楚了,但仍然无效,在 jQuery 的 .each 方法中,第一个参数不是元素,它是集合中元素的索引。假设你会修复它,删除了反对票 ;-)
  • 是的,对,我总是忘记回调需要键和值 -> 固定
【解决方案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
});

【讨论】:

    【解决方案3】:

    .each 方法将this 设置为实际的 DOM 对象,您可以将该 DOM 对象用另一个 $() 包装来将其转换为 jQuery 对象

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

    【讨论】:

      【解决方案4】:

      你总是可以在你的函数中检查一个 jQuery 对象并在必要时强制转换它,例如

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-27
          • 1970-01-01
          • 2011-03-10
          • 1970-01-01
          相关资源
          最近更新 更多