Fuh*_*ton 5 javascript optimization jquery jquery-selectors
我正在以MVC格式渲染超过600个表单(php Codeigniter).这些表单中的每一个都有一个标有"更多选项"的按钮.单击此按钮时 - 将切换位于同一父元素中的隐藏div,显示更多输入字段和数据.问题是在控制台中兄弟切换很快,但是当我点击实际按钮时,触发需要很长时间.
使用id是推荐的修复,但是当我有这么多的div元素时,它有点不切实际.
这是我的js文件
jQuery(document.ready(function(){
jQuery("form >button[name='more_data'].meta_button").click( function(){
jQuery(this).siblings("div.meta").toggle("fast");
});
});
Run Code Online (Sandbox Code Playgroud)
这是结构(这些div有650个,还有更多)
<div>
<li id="bCIya8DZyr4idseJe5cbLA" class="even">
<form action="url" method="post" accept-charset="utf-8">
<div class="space_name"></div>
<button name="more_data" type="button" class="meta_button">More Options</button>
<input type="submit" name="Submit" value="Submit">
<div class="meta" style="overflow: hidden; display: block;">
<div class="meta_block">Set Estimates:
<div class="input_estimate">1:
<input type="number" name="estimate_1" value="" id="estimate_1" class="estimate">
</div>
<div class="input_estimate">2:
<input type="number" name="estimate_2" value="" id="estimate_2" class="estimate">
</div>
<div class="input_estimate">3:
<input type="number" name="estimate_3" value="" id="estimate_3" class="estimate">
</div>
</div>
</div>
</form>
</li>
</div>
Run Code Online (Sandbox Code Playgroud)
注意:我正在运行jQuery 1.7.2
当您有多个事件侦听器时,使用@jrummell 建议的委托(.on()带有选择器)会更快,因为您将侦听器的数量减少到一个。
因此,在这种情况下,我建议使用更简单的选择器:
$(function(){
$('.meta_button').on('click', function(){
$(this).siblings('div.meta').toggle('fast');
});
});
Run Code Online (Sandbox Code Playgroud)
这样,您就可以拥有更简单的选择器,并且在触发点击时进行更少的检查,因为没有委托。此外,不会捕获对表单中其他元素的点击。
动画可能会减慢速度。甚至更多的是同时在多个元素上执行的动画。
尝试移动div.meta单个父元素中的所有元素并仅在该单个元素上应用动画。
您还可以通过使用完全删除动画toggle()(在这种情况下,有关多个项目的注释仍然有效)。
例子:
$(function(){
$('.meta_button').on('click', function(){
$(this).parent().find('.meta_holder').toggle();
// OR
// $(this).next('.meta_holder').toggle();
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
637 次 |
| 最近记录: |