直接上代码如下,已知formValue是已经序列化的表单数据,有1000个键值对。
        var myForm = document.createElement('form');
        myForm.setAttribute("action", formAction);
        myForm.setAttribute("method", "POST");
        myForm.setAttribute("id", "myFormId");
        for(var i in formValue) {
           var input = formValue[i];
            var inputName = input.name;
            var inputValue = input.value;
            var inputTag = document.createElement('input');
            inputTag.setAttribute("type", "hidden");
            inputTag.setAttribute("name", inputName);
            inputTag.setAttribute("value", inputValue);
            myForm.appendChild(inputTag);
        }
以上可以为每个键值对添加input,使之成为input元素。但是该循环效率太低,有木有更高效的方法完成这一功能。跪求大神!

解决方案 »

  1.   

    cup效率很快的,这个循环效率基本没有影响。
    如果一定说要快,可以直接添加组装好的html
      

  2.   

    我在这个循环前后加了时间提示,显示完成这个循环要20多秒。。添加组装好html?什么意思,能具体说下么怎么个组装法么?谢谢啦
      

  3.   

    我觉得效率问题在于频繁的createElement,这些DOM操作最耗时不过了。LZ创建这个form,是让用户手动提交的么?如果是js代码提交,可以考虑将用异步请求。var data = [];
    for(var i in formValue) {
      data.push(formValue[i].name+'='+formValue[i].vlaue);
    }
    data = data.join('&');
    然后ajax把data send出去,避免频繁crateElement。
    ajax回调中将location导航一下,这样和form.submit()区别不是很大。
    还有就是,可以考虑只create一个hidden input,然后把formValue组织一下,一起放到这里面。后端根据相应组织结构,把formValue里的值split开,是一个意思的。同样也避免了大量createElement。