Ogni volta che digita un carattere in un campo di introduzione, ho analizzare l'espressione in modo che ottengo:Come posso assegnare un input di testo allo stile durante la digitazione?
- Un array di token, cioè, tokenArray = [2, *, COS, (4,)]
- una corrispondente matrice di tipi di token, cioè, tokenType = [NUMERO, operatore, una funzione (NUMERO,)]
devo stile ogni token (ad esempio assegnando un colore diverso per ogni token) in base al rispettivo tipo di token.
ho potuto per lo stile facilmente una copia dinamica del testo di input in un diverso <div>
(non il testo di input in sé, che è quello che sto chiedendo aiuto) come segue:
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>
Come posso lo stile del testo di input direttamente nel campo di immissione in cui si digita? Qualche soluzione JavaScript?
UPDATE
risposta di Tim alla domanda replace innerHTML in contenteditable div offre qualche buon aiuto.
Come si modifica http://jsfiddle.net/2rTA5/2/ per quando per ogni keydown, uno reparses l'intero modificabile? Ad esempio, immagina di digitare "= if (AND (3 = 2, A1: A4, OR (0,1)), 5,6)" e, a ogni keydown, il modificabile viene riscritto a livello di codice (vedere la descrizione del token sopra) e perdo il cursore.
Come può questa soluzione ignorare il tipo di token o carattere o nodo e semplicemente salvare e ripristinare il cursore assoluto (dall'inizio della posizione) che era prima del keydown?
In realtà ho appena iniziato a lavorare su qualcosa di simile a un paio di rs fa! Non è facile, ma quello che ho fino ad ora potrebbe aiutarti a iniziare: https://github.com/minitech/OpenEdit – Ryan
In alternativa, puoi anche provare a rendere il '' trasparente e lo stile dietro. Questo funziona meglio per i colori di sfondo, ma puoi anche rendere il testo trasparente per ottenere effetti di stile semplici. – Ryan
Grazie a tutti! – Gian