Sto cercando una funzione che mi permetta di costruire un elemento prima o dopo il testo selezionato. Qualcosa di simile a questo javascript replace selection all browsers ma per aggiungere del contenuto prima o dopo la selezione anziché sostituirlo, come i metodi after()
e before()
jQuery. Dovrei usare qualche metodo di selezione DOM, se sì quale? O esiste qualcosa di più facile da realizzare?Aggiungi elemento prima/dopo la selezione del testo
6
A
risposta
10
Ecco un paio di funzioni per fare questo.
vivo esempio: http://jsfiddle.net/hjfVw/
Codice:
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
In MSIE: collapse determinato intervallo e l'uso pasteHTML inserire l'elemento
Altri: anche collapse dato Range e inserire l'elemento tramite insertNode
Entrambi collapse-methods accetta un argomento facoltativo che definisce dove si vuole collassare. Se si desidera mettere l'elemento alla fine, collassare fino alla fine, altrimenti all'inizio.
Problemi correlati
- 1. Disattiva la selezione del testo nell'area testo
- 2. Selezione del testo Evidenziazione eccessiva
- 3. QWebview/webkit disabilita la selezione del testo
- 4. come impostare la selezione di selezione all'interno del testo
- 5. Errore di modifica del testo: TextView non supporta la selezione del testo. Selezione annullata
- 6. jQuery evento di selezione del testo
- 7. Sposta la selezione dopo un elemento DOM
- 8. QSyntaxHighlighter - la selezione del testo ha la precedenza sullo stile
- 9. Aggiungi elemento alla barra laterale del Finder
- 10. Bootstrap Typeahead: rimuove la selezione forzata del primo elemento
- 11. jQuery: aggiungi elemento dopo un altro elemento
- 12. Come disabilitare temporaneamente la selezione del testo usando JavaScript?
- 13. Disabilitato <input> che consente la selezione del testo?
- 14. IllegalArgumentException durante la selezione del testo in Android TextView
- 15. Selezione del testo Android in Webview
- 16. Selezione del testo PDF su iOS
- 17. Matlab aggiungi del testo all'esterno della figura
- 18. Selezione del testo da una JLabel?
- 19. Selezione del testo Modifica Ancore mancanti
- 20. Aggiungi ombra (effetto testo da incasso) all'etichetta Cocoa senza degradare la qualità del rendering del testo
- 21. Selezione XPath per testo interno
- 22. aggiungi testo alla fine del file
- 23. Selezione del testo in una WebView?
- 24. Repository Pattern: Aggiungi elemento
- 25. Visual Studio: Aggiungi elemento/Aggiungi come collegamento anziché solo Aggiungi
- 26. Aggiungi elemento nella matrice
- 27. D3: Aggiungi duplicati di una selezione
- 28. Come posso posizionare un elemento accanto alla selezione del testo dell'utente?
- 29. Blocco di selezione del testo o selezione di più testo contemporaneamente
- 30. aggiungi elemento nell'elenco di array di android
Non una risposta, ma: Scommetto che è possibile farlo abbastanza facilmente usando di Tim Giù [Rangy] (http://code.google.com/p/rangy /) libreria. –