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, {
      ...
    });
});

最新更新