¿Cómo obtengo el índice del texto de intercalación en una entrada?¿Obtiene la posición de intercalación en la entrada de HTML?
Respuesta
<!doctype html>
<html>
<head>
<meta charset = "utf-8">
<script type = "text/javascript">
window.addEventListener ("load", function() {
var input = document.getElementsByTagName ("input");
input[0].addEventListener ("keydown", function() {
alert ("Caret position: " + this.selectionStart);
// You can also set the caret: this.selectionStart = 2;
});
});
</script>
<title>Test</title>
</head>
<body>
<input type = "text">
</body>
</html>
Habíamos usado algo como esto para una aplicación antigua javascript, pero no lo hemos probado en un par de años:
function getCaretPos(input) {
// Internet Explorer Caret Position (TextArea)
if (document.selection && document.selection.createRange) {
var range = document.selection.createRange();
var bookmark = range.getBookmark();
var caret_pos = bookmark.charCodeAt(2) - 2;
} else {
// Firefox Caret Position (TextArea)
if (input.setSelectionRange)
var caret_pos = input.selectionStart;
}
return caret_pos;
}
Parece ser un consistente 21 caracteres desactivados en IE. Con un ajuste parece estar bien allí, pero luego es inexacto en FF. [http://jsfiddle.net/zqNpV/](http://jsfiddle.net/zqNpV/) – stoicfury
funciona como un encanto en ie y cromo. –
A continuación le conseguirá el inicio y el final de la selección como índices de caracteres. Funciona para entradas de texto y áreas de texto, y es un poco complicado debido al extraño manejo de saltos de línea de IE.
function getInputSelection(el) {
var start = 0, end = 0, normalizedValue, range,
textInputRange, len, endRange;
if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
start = el.selectionStart;
end = el.selectionEnd;
} else {
range = document.selection.createRange();
if (range && range.parentElement() == el) {
len = el.value.length;
normalizedValue = el.value.replace(/\r\n/g, "\n");
// Create a working TextRange that lives only in the input
textInputRange = el.createTextRange();
textInputRange.moveToBookmark(range.getBookmark());
// Check if the start and end of the selection are at the very end
// of the input, since moveStart/moveEnd doesn't return what we want
// in those cases
endRange = el.createTextRange();
endRange.collapse(false);
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
start = end = len;
} else {
start = -textInputRange.moveStart("character", -len);
start += normalizedValue.slice(0, start).split("\n").length - 1;
if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
end = len;
} else {
end = -textInputRange.moveEnd("character", -len);
end += normalizedValue.slice(0, end).split("\n").length - 1;
}
}
}
}
return {
start: start,
end: end
};
}
var textBox = document.getElementById("textBoxId");
textBox.focus();
alert(getInputSelection(textBox).start);
Ahora hay un buen plugin de jQuery para esto: Caret plugin
A continuación, puede simplemente llamar $("#myTextBox").caret();
Se ha actualizado el enlace por usted –
- 1. ¿Cómo obtengo la posición actual de intercalación?
- 2. Obtiene elemento en la posición especificada - JavaScript
- 3. ¿Cómo encontrar la posición de intercalación en un NSTextView?
- 4. Establecer la posición de intercalación en javafx.scene.control.TextArea y javafx.scene.control.TextField
- 5. Obtiene la posición actual de scrollview animado
- 6. Guardar y restaurar la posición de intercalación para contentEditable div
- 7. Ajuste de la posición de intercalación a un nodo vacío dentro de un elemento contentEditable
- 8. marcador de posición VS etiqueta para la entrada en HTML5
- 9. ¿Obtiene la posición de un elemento dentro de un ListView?
- 10. Insertar texto en el cuadro de texto de WPF en la posición de intercalación
- 11. Usando getchar() en c obtiene 'Enter' después de la entrada
- 12. Cómo insertar texto en la posición actual de intercalación en un área de texto
- 13. ¿Cómo obtener/configurar la posición de intercalación en el cuadro de texto de Silverlight?
- 14. Insertar en la posición de intercalación con un cuadro de texto de Silverlight
- 15. Establecer la posición de intercalación justo después del elemento insertado en un contentEditable div
- 16. HTML codificación en la entrada MVC
- 17. ¿Cómo obtener la posición de currículum dentro de div satisfactoria con elementos secundarios html?
- 18. Escribir nuevo HTML en la posición de llamada
- 19. ¿Obtiene la posición de la "ventana gráfica" en el safari móvil?
- 20. Establecer la posición del cursor en un campo de texto de entrada
- 21. Fuerza la posición de desplazamiento de la página hacia arriba al actualizar la página en HTML
- 22. mysql comprobar la intercalación de una tabla
- 23. Descubre la intercalación de una columna MySQL
- 24. Pasar campos de entrada ocultos en HTML Seleccionar la opción
- 25. cambiar la intercalación predeterminada en phpmyadmin
- 26. Google maps api v3 posición de la ventana de entrada en la imagen personalizada
- 27. ¿Obtiene la posición de desplazamiento actual y la pasa como una variable con un enlace?
- 28. Navegador leyendo HTML desde la entrada estándar
- 29. HTML/Javascript: reparación de la posición de desplazamiento después de la rotación de la pantalla
- 30. Creando TextField de entrada en una posición precisa en Canvas?
Esto no funciona en IE <= 8. –
Bueno, el oyente debe ser registrado en keyup y no maneja nuevas líneas (textarea), pero esto hace exactamente lo que se solicitó en los navegadores modernos. – inta