Cada vez que escribe un carácter en un campo de entrada, I analizar la expresión de modo que consiga:¿Cómo puedo aplicar estilo a la entrada de texto mientras escribo?
- Una serie de fichas, es decir, tokenArray = [2, *, COS, (, 4,)]
- una matriz correspondiente de tipos de tokens, es decir, TokenType = [número, operador, FUNCTION, (, número,)]
necesito el estilo de cada ficha (por ejemplo la asignación de un color diferente para cada token) en función de su tipo de token respectivo.
he podido estilo fácilmente una copia dinámica del texto de entrada en un <div>
(en sí misma no es el texto de entrada, que es lo que estoy pidiendo ayuda) diferente de la siguiente manera:
JavaScript:
function processExpression() {
var userInput = document.getElementById('inputText').value;
var resultOutput = parse(userInput); //this generates the two arrays described above
for (i in tokenArray)
newHTML += "<span style='color: " + colorMap[ tokenType[i] ] + " '>" + tokenArray[i] + "</span>";
document.getElementById('styledExpression').innerHTML = newHTML;
}
HTML:
<input type="text" id="inputText" value="" placeholder="Type expression" size="40"
onKeyDown="processExpression();"
onKeyUp="processExpression();"/>
<div id="styledExpression" value=""></div>
Cómo puedo estilo I del texto de entrada directamente en el campo de entrada donde escribo? ¿Alguna solución de JavaScript?
ACTUALIZACIÓN
respuesta de Tim a la pregunta replace innerHTML in contenteditable div proporciona una buena ayuda.
¿Cómo se modificaría http://jsfiddle.net/2rTA5/2/ para resolver cuando en cada keydown, uno repara todo el editable? Por ejemplo, imagina que escribes "= if" (AND (3 = 2, A1: A4, OR (0,1)), 5,6) "y, en cada keydown, el editable se vuelve a escribir programáticamente (ver la descripción del token arriba)) y pierdo el cursor.
¿Cómo puede esta solución ignorar el tipo de token o carácter o nodo y simplemente guardar y restaurar el cursor absoluto (desde el comienzo de la) posición que estaba antes de la tecla?
De hecho, acabo de empezar a trabajar en algo como esto un par de horas Hace rs! No es fácil, pero lo que tengo hasta ahora podría ayudarlo a comenzar: https://github.com/minitech/OpenEdit – Ryan
Alternativamente, también puede intentar hacer que el '' sea transparente y diseñar cosas detrás de él. Esto funciona mejor para los colores de fondo, pero también puede hacer que el texto sea transparente para obtener efectos de estilo simples. – Ryan
¡Gracias a todos! – Gian