Vorrei trovare e tenere traccia del "numero di riga" (righe) del cursore in un'area di testo. (L'immagine più grande è quella di analizzare il testo sulla linea ogni volta che una nuova riga viene creata/modificata/selezionata, se ovviamente il testo non è stato incollato. Ciò evita di analizzare l'intero testo necessariamente a intervalli regolari).Individuare il numero di riga (riga) del cursore in un'area di testo
Ci sono un paio di messaggi su StackOverflow, ma nessuno di essi risponde in modo specifico alla mia domanda, la maggior parte delle domande riguarda la posizione del cursore in pixel o la visualizzazione di numeri di linee oltre alla textarea.
Il mio tentativo è al di sotto, funziona bene quando si inizia alla riga 1 e non si esce dalla textarea. Fallisce quando si fa clic fuori dalla textarea e di nuovo su di essa su una linea diversa. Non riesce anche a incollare il testo perché la riga iniziale non è 1.
La mia conoscenza di JavaScript è piuttosto limitata.
<html>
<head>
<title>DEVBug</title>
<script type="text/javascript">
var total_lines = 1; // total lines
var current_line = 1; // current line
var old_line_count;
// main editor function
function code(e) {
// declare some needed vars
var keypress_code = e.keyCode; // key press
var editor = document.getElementById('editor'); // the editor textarea
var source_code = editor.value; // contents of the editor
// work out how many lines we have used in total
var lines = source_code.split("\n");
var total_lines = lines.length;
// do stuff on key presses
if (keypress_code == '13') { // Enter
current_line += 1;
} else if (keypress_code == '8') { // Backspace
if (old_line_count > total_lines) { current_line -= 1; }
} else if (keypress_code == '38') { // Up
if (total_lines > 1 && current_line > 1) { current_line -= 1; }
} else if (keypress_code == '40') { // Down
if (total_lines > 1 && current_line < total_lines) { current_line += 1; }
} else {
//document.getElementById('keycodes').innerHTML += keypress_code;
}
// for some reason chrome doesn't enter a newline char on enter
// you have to press enter and then an additional key for \n to appear
// making the total_lines counter lag.
if (total_lines < current_line) { total_lines += 1 };
// putput the data
document.getElementById('total_lines').innerHTML = "Total lines: " + total_lines;
document.getElementById('current_line').innerHTML = "Current line: " + current_line;
// save the old line count for comparison on next run
old_line_count = total_lines;
}
</script>
</head>
<body>
<textarea id="editor" rows="30" cols="100" value="" onkeydown="code(event)"></textarea>
<div id="total_lines"></div>
<div id="current_line"></div>
</body>
</html>
per riga, vuoi dire remare? Colonna e linea non sono la stessa cosa quando si parla di testo. Non ci sono colonne quando vengono utilizzati font non monospaziali. – Anurag
Scusa, sì, intendo riga. Aggiornerò il mio post originale – ethicalhack3r