优化/改进客户端代码

时间:2012-02-07 15:42:02

标签: javascript jquery jquery-ui

我有一个项目列表,我需要记录它在列表中的位置 - 即排序顺序,我运行下面的代码绑定停止事件 - 但是有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及其排序顺序列表

1 个答案:

答案 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;
    });