jQuery.each() 和 CodeMirror

jQuery .each() and CodeMirror

我正在许多不同的选项卡中创建 CodeMirror 文本区域,我需要循环访问通过单击创建的选项卡中的文本区域。我找到了元素,那就是我需要转换的文本区域。我正在尝试使用 jQuery .each() 来浏览它们并转换为 CodeMirror:

var queryBuilder = $(tabPanelDiv).find(".QueryBuilder");
queryBuilder.each(function(index, el) {            
    var editorQuery = CodeMirror.fromTextArea($(el)[index], {
         lineNumbers: true,
         tabMode: "indent",
         mode: "text/x-sql",
         theme: "eclipse"
    });
    queryArr.push(editorQuery);
});

我遇到的问题是我缺乏使用 .each() 以及如何将元素插入 CodeMirror.fromTextArea() 的经验。在此 .each() 中,转换适用于第一个文本区域,但第二个文本区域始终以未定义的形式进入 CodeMirror 代码。我拥有所有 5 个文本区域,但我以错误的方式使用 index, el 参数。谁能帮我解决这个问题?

忽略index。在 each 中,el 参数 该索引处的正确元素,index 参数只是为了让您知道自己在哪里在你正在迭代的集合中。

你应该简单地使用 el,而不是 $(el)[index]:

queryBuilder.each(function(index, el) {            
    var editorQuery = CodeMirror.fromTextArea(el, {
      ...
    });
    queryArr.push(editorQuery);
});

此外,因为您要将一个数组(元素)转换为另一个数组(CodeMirror 对象),您应该使用 map,而不是 each:

var queryArr = queryBuilder.map(function(index, el) {            
    return CodeMirror.fromTextArea(el, {
      ...
    });
});