2010-05-06 87 views
0

我想引用一個元素,然後重用它拋出我的代碼,但我不確定正確的方式。以下是我的嘗試,但它只適用於某些地方。 (編輯:作品,有一個更遠的錯誤在我的代碼,但我仍然好奇,如果這是最好的做法還是不行。)在JQuery中使用變量的正確方法是什麼?

$(document).ready(function() { 
    var image = $("#content img"); 
    image.wrap("<span />"); 
    image.hover(function(){}, function(){}); 
}); 
+0

我有另一個錯誤,導致這不工作,修復錯誤後,它工作正常。不過,我仍然好奇這是否是一種好的做法。我在下面看到有人提到使用JQuery對象var $ image更好嗎? – 2010-05-06 20:14:43

回答

0

你的代碼對我來說看起來很好......在回調中創建一個局部變量,就像你做的一樣,總是比使用全局對象更好。然而,jQuery的的美妙之處在於可以縮短你的代碼,甚至不使用變量都:

$(document).ready(function() { 
    $("#content img").wrap("<span />").hover(function(){}, function(){}); 
}); 

這就是所謂的chaining,並允許您「鏈」了jQuery的方法共同目的是在一個表達。但是,如果你確實需要這個變量,我覺得沒有什麼問題。

+0

這是一個很棒的提示,謝謝! – 2010-05-06 22:14:48

0

這應該工作。你有什麼跡象表明image.hover()不工作?

作爲一個方面說明:這當然不是一個標準,但是當我做這樣的事情時,我在$前面加上jQuery對象的變量,所以:var $image = $("#content img"); - 只是幫助我跟蹤什麼是一個jQuery對象。

+1

它也適用於我。你是否試圖在懸停函數中使用this.css(),this.attr()等,因爲這是行不通的。您仍然必須使用它:$(this)。 – ryanulit 2010-05-06 19:58:56

+0

謝謝,我甚至沒有意識到我可以做到這一點。 – 2010-05-06 20:15:58

+0

這是一個相當標準的做法嗎?我喜歡。 – 2010-05-14 01:12:40

0

hover()應該可以正常工作。在您傳遞到hover()的函數內部,您可以使用$(this)來獲取要懸停的元素。所以:

$(document).ready(function() { 
    var image = $("#content img"); 
    image.wrap("<span />"); 
    image.hover(function(){ 
     $(this).css({border:'5px solid red'}); 
    }, function(){ 
     $(this).css({border:'none'}); 
    }); 
}); 

這對我有用。

0

你把它寫在上面的方式,var image是一個局部變量的作用域被稱爲onReady的匿名函數。因此,在該函數範圍之外的任何對該變量的調用將產生ReferenceError。在Javascript中,使用var作爲變量實例化的前綴將其標記爲局部變量,而將其保留爲全局變量(通常不適用)。考慮以下(人爲)示例:

(function() { 
    global_variable = "global"; 
    var local_variable = "local"; 

    console.debug(global_variable); 
    console.debug(local_variable); 
})(); 

console.debug(global_variable); 
console.debug(local_variable); 

// Produces: 

global 
local 
global 
ReferenceError: local_variable is not defined 
0

我不確定我是否關注你,Jared。如果你看看下面的JS Bin,我(我認爲)重複了你的例子,它運行良好。

http://jsbin.com/izimi3/

也許問題是語法,或範圍爲本?另外,如果這是字面上的代碼(顯然是無細節的),那麼我建議不要使用變量來存儲這個。通常,當你要經常重複使用選擇器時(例如「$ this = $(this)」),你會希望使用變量,否則保持代碼簡單到足以使用你需要的選擇器可能會使事情對你更容易。

無論如何,我希望自己閱讀正確,不會浪費時間。

相關問題