使用大型jQuery选择器防止脚本超时

时间:2013-07-19 16:38:07

标签: javascript jquery html text nicedit

对于我正在进行的项目,页面上有一些富文本编辑框,数量各不相同,但可以变得非常大(50个问题/答案集,每个都有8个文本框)。

最初这些是接受HTML的纯文本框,但是由于使用它的终端客户端不能流利使用HTML,我们改用了使用richtext编辑器,因此使用javascript richtext转换原件插件(NicEdit)。

由于这些输入框的数量可变,我使用的是jQuery选择器:

 $("textarea").each(function(index) {
      var id = this.id;
      myNicEditor.addInstance(this);
      $("#nic"+id).attr('contenteditable','false');
 });

但是,当编辑总数超过200时,我开始收到脚本超时警告。在400我必须点击“继续”两次才能完成。

我如何重组此功能以防止超时?

2 个答案:

答案 0 :(得分:0)

网页上的400个富文本编辑器必须使用大量资源。我认为你最好的选择是不要试图将所有这些放在一个页面上。尝试重新组织您的应用程序 - 可能会将其分解为较小的页面,或在需要时根据需要加载页面的子部分。

或者你可以按原样保留textareas,然后根据需要一次只加载一个富编辑器。

答案 1 :(得分:0)

jQuery在选择器中做了很多事情,但找到的元素没有包装在jQuery对象中。 200不是那么大,但无论如何,你可以做两件事:

  1. 通过vanilla JavaScript调用
  2. 查找所有textareas
  3. 通过setTimeout
  4. 处理事件队列中的textareas
    var els = document.getElementsByTagName("textarea")
    var i = 0
    var func = function() {
        var el = els[i]
        myNicEditor.addInstance(el);
        $("#nic"+el.id).attr('contenteditable','false');
        i++
        setTimeout(func,0)
    }
    func()