【发布时间】:2013-03-11 12:12:45
【问题描述】:
我正在以 MVC 格式 (php Codeigniter) 呈现超过 600 个表单。这些表单中的每一个都有一个标有“更多选项”的按钮。当您单击此按钮时 - 位于同一父元素中的隐藏 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");
});
});
这是结构(这些 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>
注意:我正在运行 jQuery 1.7.2
【问题讨论】:
-
您可以尝试使用
.nextAll()而不是.siblings()。为什么有这么多表格? -
如果适用,将“div.meta”更改为“.meta”。
-
你在控制台中使用什么代码速度快?
-
你确定没有渲染问题?喜欢复杂的回流和昂贵的 CSS 规则?根据我的经验,我们看到的代码看起来很快。
-
属性选择器很慢;如果你真的不需要它,我会删除它并按类选择。
标签: javascript jquery optimization jquery-selectors