2014-01-25 56 views
2

我正在學習jQuery和我發現我寫的東西像這一切的時候:減少jQuery選擇的重複使用

if ($("#Menu").zIndex()<200) { 
    $("#Menu").zIndex(250) 
    return; 
} 
else 
{ 
    $("#Menu").zIndex(100) 
    return; 
} 

我在想,一定有辦法不必須重複$(「#Menu」) - 類型選擇器。我看到我可以將$(「#Menu」)賦值給一個變量,然後使用它,但是吹掉了很好的「.zIndex」方法。或者我可以用一個函數做些事情。

這種情況的最佳做法是什麼?

+0

將它分配給像你所建議的變量有什麼問題?這聽起來很合理。 –

+0

回答了這個問題。如果您認爲這有助於您解決問題,請在投票箭頭旁邊的綠色複選框中提供一個可接受的答案。 –

回答

5

一個很好的指示器,您將使用jQuery元素或DOM中的某個元素,以$開頭的變量。這樣,您就知道您正在操作一些HTML元素,而不是某些僅用於javascript才能運行的標準var

因此,您可以使用任何您想要的名稱作爲var名稱。我決定用$m顯示它是多麼容易寫比$menu$("#menu")

編輯:它在一個變量caching另一個好處是你jQuery沒有你的整個document每次擦洗你叫它。 感謝您的標註@AdamMerrifield

因此,類似這樣的事情是典型的做法。

var $m = $('#menu'); 

if($m.zIndex() < 200) { 
    $m.zIndex(250); 
    return; 
} else { 
    $m.zIndex(100); 
    return; 
} 

此外,你甚至可以用ternary operator更加縮短代碼。

Learn More With Interactive Lesson

複製了@哈代的響應:

var $m = $('#menu'); 
var new_z = $m.zIndex() < 200 ? 250 : 100; 
$m.zIndex(new_z); 
+1

就我個人而言,我會使用'$ menu'作爲變量名稱而不是'$ a'。 –

+1

哈哈,這是真的......但重點不在於它在文本中的時間長了,重點在於選擇器已被緩存,並且不必被發現! –

+0

你錯過了'('''if'檢查。' –

1

可讀性是很好的做法。你也可以做內聯語句,如:

// Read this like "if zIndex is smaller than 200 new_z 
// value comes to 250 else 100" 
var new_z = $("#Menu").zIndex() < 200 ? 250 : 100; 

$("#Menu").zIndex(new_z); 

編輯:避免對元素多次使用字符串類型引用。檢查@Nicholas Hazel的答案。

+0

是的,它很短.. :) – Hardy

+0

沒有那麼辛苦..就像「如果其他」.. – Hardy

+0

是的,但在某些情況下,這是非常簡單的閱讀。 – Hardy