我有一个项目列表,我需要记录它在列表中的位置 - 即排序顺序,我运行下面的代码绑定停止事件 - 但是有180个字段,这在我的机器上很慢,这可以优化吗?
$(".survey-fields").bind("sortstop", function(event, ui) {
$(".report-field").each(function(i) {
$(".sorted-fields").find("#" + $(this).data("field-id")).val(i + 1);
});
});
代码说明: 我有一个可排序的div列表,每个div都有一个id(db unique id,一个数字),然后我有另一个隐藏的列表,我将新位置复制到相关字段
在我使用字段名称作为字符串而不是我现在使用的ID之前,不确定是否这使得它非常慢。我有jquery ui 1.8.16
<div data-field-id="41" class="display-wrapper report-field">
<div class="field-header field-move">
<span>name: fieldname</span> | <span>max length:
100</span><span class="ui-icon ui-icon-carat-2-n-s field-icon field-toggle" title="show/hide details of this field"></span>
</div>
<div> whatever here...
</div>
</div>
我可以做的任何其他变通办法......基本上我需要通过controller
请求<{1}}向我的ajax
发送ID及其排序顺序列表
答案 0 :(得分:0)
如果没有适当的分析,很难说。此
$(".sorted-fields").find("#" + $(this).data("field-id"))
可以简化为
$("#" + $(this).data("field-id"))
因为id(应该是)在文档范围内是唯一的。另一个想法是:如果你正在使用ajax,那么填充表单字段有什么意义呢?为什么不使用一个简单的对象,可以在json中发送到服务器。像
var sortOrder = {}
$(".report-field").each(function(i) {
sortOrder[$(this).data("field-id")] = i + 1;
});