2014-01-25 57 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