Me gustaría averiguar y realizar un seguimiento del 'número de línea' (filas) del cursor en un área de texto. (La 'imagen más grande' es analizar el texto en la línea cada vez que se crea/modifica/selecciona una nueva línea, si, por supuesto, el texto no se pegó. Esto guarda el análisis del texto completo innecesariamente a intervalos establecidos).Averigüe el número de 'línea' (fila) del cursor en un área de texto
Hay un par de publicaciones en StackOverflow, sin embargo, ninguna de ellas responde específicamente mi pregunta, la mayoría de las preguntas son para la posición del cursor en píxeles o para mostrar números de líneas además del área de texto.
Mi intento está abajo, funciona bien al comenzar en la línea 1 y no salir del área de texto. Falla al hacer clic fuera del área de texto y regresar a ella en una línea diferente. También falla al pegar texto porque la línea de inicio no es 1.
Mi conocimiento de JavaScript es bastante limitado.
<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>
por línea, qué se refiere la fila? La columna y la línea no son lo mismo cuando se habla de texto. No hay columnas cuando se usan fuentes que no son de espacio simple. – Anurag
Lo siento, sí, me refiero a la fila. Actualizaré mi publicación original. – ethicalhack3r