Estoy buscando una función que me permita construir algún elemento antes o después del texto seleccionado. Algo similar como este javascript replace selection all browsers pero para agregar algo de contenido antes o después de la selección en lugar de reemplazarlo, como after()
y before()
jQuery. ¿Debería usar algún método de selección DOM, en caso afirmativo, cuál? ¿O existe algo más fácil de llevar a cabo?Agregar elemento antes/después de la selección de texto
6
A
Respuesta
10
Aquí hay un par de funciones para hacer esto.
ejemplo vivo: http://jsfiddle.net/hjfVw/
Código:
var insertHtmlBeforeSelection, insertHtmlAfterSelection;
(function() {
function createInserter(isBefore) {
return function(html) {
var sel, range, node;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = window.getSelection().getRangeAt(0);
range.collapse(isBefore);
// Range.createContextualFragment() would be useful here but is
// non-standard and not supported in all browsers (IE9, for one)
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
}
} else if (document.selection && document.selection.createRange) {
// IE < 9
range = document.selection.createRange();
range.collapse(isBefore);
range.pasteHTML(html);
}
}
}
insertHtmlBeforeSelection = createInserter(true);
insertHtmlAfterSelection = createInserter(false);
})();
2
En MSIE: collapse del rango dado y el uso pasteHTML insertar el elemento
Otros: También collapse del rango dado e inserte el elemento a través de insertNode
Tanto colapso: los métodos aceptan un argumento opcional que define dónde desea contraerse. Si desea poner el elemento al final, colapsar hasta el final, de lo contrario hasta el comienzo.
Cuestiones relacionadas
- 1. Elemento de selección basado en contenido de texto EXACTO
- 2. Establecer texto de ComboBox en la selección
- 3. Anular la selección de texto en un cuadro de texto
- 4. elemento de selección múltiple - onchange
- 5. QWebview/webkit desactivar la selección de texto
- 6. jQuery: Agregar elemento después de otro elemento
- 7. jQuery evento de selección de texto
- 8. Agregar texto antes o después de un elemento HTML
- 9. Obtener la opción seleccionada del elemento de selección
- 10. Convertir una entrada de texto a un elemento de selección con JavaScript
- 11. ¿Se puede reutilizar la selección enter() después de agregar/insertar?
- 12. Selección de texto resaltando demasiado
- 13. SlickGrid y selección de texto
- 14. Cómo anular la selección del texto de un cuadro combinado
- 15. ¿Cómo puedo evitar la selección de texto/elemento con el cursor?
- 16. elemento de selección de jquery por xpath
- 17. Elemento de selección de jQuery en la ventana primaria
- 18. Cómo agregar sombra a TextView en la selección/enfoque
- 19. Selección de un elemento de opción en un menú desplegable por su valor de texto
- 20. ¿Cómo obtener texto de selección de UIWebView?
- 21. selección ListBoxItem de enfoque Cuadro de texto
- 22. Agregar animación de selección a un UIButton
- 23. jQuery - Buscar el siguiente elemento de selección
- 24. Selección de texto de Android en Webview
- 25. ¿Agregar escucha de selección a GXT Grid?
- 26. Establecer campo de texto personalizado en la Lista de selección
- 27. Desactivación de la selección de texto en DocumentViewer
- 28. Android: obtenga la selección de texto de EditText
- 29. Cómo enfocar la entrada y anular la selección de texto dentro de ella
- 30. Elemento de selección basado en la clase secundaria
No es una respuesta, pero: Apuesto a que usted puede hacer esto con bastante facilidad utilizando de Tim abajo [Rangy] (http://code.google.com/p/rangy /) biblioteca. –