fromtextarea example code change javascript codemirror

javascript - example - codemirror tabs



Obtener instancia de CodeMirror (5)

Alguien acaba de publicar una respuesta pero la eliminó. Sin embargo, fue una solución de trabajo. ¡Gracias!

- Básicamente esta fue su solución:

// create an instance var editor = CodeMirror.fromTextArea(''code''); // store it $(''#code'').data(''CodeMirrorInstance'', editor); // get it var myInstance = $(''code'').data(''CodeMirrorInstance''); // from here on the API functions are available to ''myInstance'' again.

Quiero obtener una instancia de CodeMirror (está enlazada a un área de texto ''#code''). Desde un evento onclick, quiero agregar un valor al valor actual de la instancia de CodeMirror. ¿Cómo se puede lograr esto? De los documentos parece que no puedo encontrar nada para obtener una instancia y vincularlo a una loca var en javascript.


Hay un objeto getWrapperElement en el editor de duplicación de código que le da el elemento DOM raíz de la instancia de duplicación de código:

var codemirrorDomElem = editor.getWrapperElement();


Otro método que he encontrado en elsewhere es el siguiente:

//Get a reference to the CodeMirror editor var editor = $(''.CodeMirror'')[0].CodeMirror;

Esto funciona bien cuando crea dinámicamente la instancia de CodeMirror o reemplaza un elemento DOM existente por una instancia de CodeMirror.


Puede encontrar la instancia comenzando con <textarea> y pasando al siguiente hermano.

Nativo

  • Funcional

    document.querySelector(''#code'').nextSibling,

  • Selector

    document.querySelector(''#code + .CodeMirror''),

jQuery

  • Funcional

    $(''#code'').next(''.CodeMirror'').get(0),

  • Selector

    $(''#code + .CodeMirror'').get(0)

Extra: una solución más avanzada que incluye clipboard.js -> JSFiddle Demo

Ejemplo

// Selector for textarea var selector = ''#code''; $(function() { var editor = CodeMirror.fromTextArea($(selector).get(0), { mode: ''javascript'', theme: ''paraiso-dark'', lineNumbers : true }); editor.setSize(320, 240); editor.getDoc().setValue(JSON.stringify(getSampleData(), null, 4)); $(''#response'').text(allEqual([ document.querySelector(selector).nextSibling, // Native - Functional document.querySelector(selector + '' + .CodeMirror''), // Native - Selector $(selector).next(''.CodeMirror'').get(0), // jQuery - Functional $(selector + '' + .CodeMirror'').get(0) // jQuery - Selector ])); }); function allEqual(arr) { return arr.every(function(current, index, all) { return current === all[(index + 1) % all.length]; }); }; // Return sample JSON data. function getSampleData() { return [ { color: "red", value: "#f00" }, { color: "green", value: "#0f0" }, { color: "blue", value: "#00f" } ]; }

#response { font-weight: bold; }

<link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.7.0/codemirror.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.7.0/theme/paraiso-dark.min.css" rel="stylesheet"/> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.7.0/codemirror.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div>All equal?: <span id="response"></span></div> <textarea rows="10" cols="60" id="code"></textarea>


Simplemente puedes soltar la var : en lugar de tener

var editor = CodeMirror.fromTextArea...

Solo tengo

editor = CodeMirror.fromTextArea...

Entonces el editor está directamente disponible para usar en otras funciones