Может ли codemirror использоваться в нескольких текстовых областях?

Может codemirror использоваться в нескольких текстовых областях? Я использую много текстовых областей, которые генерируются динамически.

<script type="text/javascript"> 
var editor = CodeMirror.fromTextArea('code', {
height: "dynamic",
parserfile: "parsecss.js",
stylesheet: "codemirror/css/csscolors.css",
path: "codemirror/js/"
});
</script>

Я бы предпочел установить класс в текстовом поле, чтобы подключить его к codemirror. Является ли это возможным? Другой способ решения этого вопроса - установить несколько идентификаторов. Приведенный выше код устанавливает идентификатор "code" для подключения к codemirror.

Ответ 1

Вы можете сделать несколько вызовов CodeMirror.fromTextArea в несколько текстовых областей Codemirror-ify.

Если вам нужно несколько текстовых областей с одинаковыми параметрами, заверните вызов CodeMirror.fromTextArea в функцию, например:

function editor(id)
{
    CodeMirror.fromTextArea(id, {
        height: "350px",
        parserfile: "parsexml.js",
        stylesheet: "css/xmlcolors.css",
        path: "js/",
        continuousScanning: 500,
        lineNumbers: true
    });
}

Затем вы можете применить его к своим текстовым областям, например:

editor('code1');
editor('code2');

Ответ 2

Может быть полезно кому-то, прикрепите его к нескольким текстовым областям, используя класс html:

<textarea class="code"></textarea>
<textarea class="code"></textarea>
<textarea class="code"></textarea>

<script type="text/javascript">
function qsa(sel) {
    return Array.apply(null, document.querySelectorAll(sel));
}
qsa(".code").forEach(function (editorEl) {
  CodeMirror.fromTextArea(editorEl, {
    lineNumbers: true,
    styleActiveLine: true,
    matchBrackets: true,
    theme: 'monokai',
  });
});
</script>

Пожалуйста, напишите причину, если проголосовали...!

Ответ 3

Попробуйте следующее:

<script>
var js_editor = document.getElementsByClassName("js_editor");
Array.prototype.forEach.call(js_editor, function(el) {
    var editor = CodeMirror.fromTextArea(el, {
        mode: "javascript",
        lineNumbers: true,
        styleActiveLine: true,
        theme: 'duotone-light',
        lineNumbers: true
      });
    // Update textarea
    function updateTextArea() {
        editor.save();
    }
    editor.on('change', updateTextArea);
});
</script>
<textarea class="js_editor"></textarea>
<textarea class="js_editor"></textarea>
<textarea class="js_editor"></textarea>

Ответ 4

Попробуйте этот код

function getByClass(sClass){
    var aResult=[];
    var aEle=document.getElementsByTagName('*');
    for(var i=0;i<aEle.length;i++){
        /*foreach className*/
        var arr=aEle[i].className.split(/\s+/);
        for(var j=0;j<arr.length;j++){
            /*check class*/
            if(arr[j]==sClass){
                aResult.push(aEle[i]);
            }
        }
    }
    return aResult;
};


function runRender(type){
    var aBox=getByClass("code_"+type);
    for(var i=0;i<aBox.length;i++){
        //alert(aBox[i].innerHTML);
        //var editor = CodeMirror.fromTextArea(document.getElementById("code_javascript"), {
        var editor = CodeMirror.fromTextArea(aBox[i], {
            lineNumbers: true,
            mode: "text/x-csrc",
            keyMap: "vim",
            matchBrackets: true,
            showCursorWhenSelecting: true,
            theme:"blackboard",
        });
    }
};
runRender('javascript');
runRender('c');
runRender('java');
runRender('bash');