【发布时间】:2011-03-10 17:19:42
【问题描述】:
我正在尝试找到一种方法来最大限度地减少 Selector 查找的次数。我的问题是我有一个用基本 $(document).ready() 定义的变量,需要在嵌套在 $(document).ready() 中的函数内进行更新
考虑这个例子(编辑:我更新它以更具解释性)
<script>
//var $current_page = $home_page; **<--I DONT want to do this, going global
and of course it doesn't work since
$home_page isn't defined yet.**
$(document).ready(function() {
var $home_page = $("#home-page");
var $portfolio_page = $("#portfolio-page");
var $about_page = $("#about-page");
var $current_page = $home_page; // **<--This variable, in this scope level,
// is what I want updated**
$("#home-btn").click(function () {
$current_page.stop()
$current_page.show()
$current_page.animate({
duration: 360,
easing: 'easeInCirc',
complete: function() {
$(this).css({ top: -700 });
}
);
$current_page = $home_page;
});
$("#portfolio-btn").click(function () {
$current_page.stop()
$current_page.show()
$current_page.animate({
duration: 360,
easing: 'easeInCirc',
complete: function() {
$(this).css({ top: -700 });
}
);
$current_page = $portfolio_page; //<--This needs to somehow update the
// variable in the $(document).ready
// scope, but not global**
});
});
<script>
如何更新变量 $current_page 而不使其成为全局变量?
编辑: 这样做是为了在您单击菜单项时为当前页面 div 设置动画。是的,它缺少一些东西,是的,它可能没有意义。这只是一个示例,并非实际应用。
我知道这个例子对于性能来说仍然是微不足道的,忽略这个事实。我只想知道如何做到这一点,而不是关于它是否是最佳实践或性能的教训。谢谢各位。
【问题讨论】:
-
您能否向我们展示一下您遇到性能问题的示例? ID 选择器查找是迄今为止最快的,如果您遇到性能问题,最好查看特定的瓶颈,而不是尝试在选择器级别进行微优化。
-
您当前的代码有什么问题?您的示例在方法中对其进行了更改...但在附加
click处理程序之前已将其设置为此。您是否要重新运行选择器以查找新元素或其他内容? -
您的代码正在更新 $current_page。我不明白你的问题。你想做什么?
-
关于您的编辑:我没有看到问题;正如我在下面所说的,变量 is 在内部函数的范围内......
标签: javascript jquery variables scope document-ready