2013-02-17 96 views
1

我是jQuery的新手,所以如果我走錯了方向,請指教我。來自jQuery選擇器的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() 

是不是一個很好的解決方案,因爲這樣我會只寫代碼的重複..

+0

然而,JavaScript是不打算採取這樣的功能,例如從右鍵單擊保護。請注意,用戶可以輕鬆關閉JavaScript。 – cIph3r 2013-02-17 23:57:58

+0

是的,我知道它:) – nkint 2013-02-18 00:11:19

回答

2

加以包裝。首先,它構造了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 
}); 
6

使用JQuery,您必須使用$(this)而不是this關鍵字。

0

你總是可以爲您在您的功能jQuery對象,如有必要將其丟,如

if (!image_object instanceof $) { 
    image_object = $(image_object); 
} 
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"}

+0

你的編輯更清楚你在說什麼,但仍然無效,在jQuery的['.each'](http://api.jquery.com/each/)方法的第一個參數不是元素,它是集合中元素的索引。刪除向下投票假設您將修復它;-) – 2013-02-18 00:03:42

+0

是的,對,我總是忘記,回調需要鍵和值 - >修復 – cIph3r 2013-02-18 00:05:39

+0

感謝您的Java代碼:) – nkint 2013-02-18 00:14:40

0

.each方法設置this實際DOM對象,你可以反過來說,DOM當你調用jQuery的功能,用它做了幾件任務的選擇對象轉換爲jQuery對象與另一$()

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