Posso simulare la selezione del testo con il mouse in JavaScript?
-
07-07-2019 - |
Domanda
Vorrei selezionare il testo sulla pagina simulando il pulsante sinistro del mouse verso il basso e trascinandolo in una posizione x, y specificata (in pixel)
Questo può essere fatto con JavaScript?
Soluzione
Non credo sia possibile controllare il mouse in questo modo usando JavaScript.
Tuttavia, puoi selezionare parti di un documento direttamente utilizzando JavaScript. Ad esempio:
var h3s = document.getElementsByTagName("h3");
var range = document.createRange();
range.selectNode(h3s[0]);
window.getSelection().addRange(range);
selezionerebbe il primo elemento h3.
Vedi anche: http://www.quirksmode.org/dom/range_intro.html per maggiori informazioni sugli intervalli di costruzione.
Per selezionare l'intero corpo di un documento, è possibile utilizzare:
var body = document.getElementsByTagName("body")[0];
var range = document.createRange();
range.selectNode(body);
window.getSelection().addRange(range);
Per selezionare il 3o carattere, per esempio, il 4o paragrafo in un documento, prova:
var p4 = document.getElementsByTagName("p")[3].firstChild;
var range = document.createRange();
range.setStart(p4, 2);
range.setEnd(p4, 3);
window.getSelection().addRange(range);
Altri suggerimenti
/** * Select text between 2 elements. Support selection of continuous elements. * @param {Object} element1 begin element. * @param {Object} element2 end element. */ function selectBetweenTwoElements(element1, element2) { if (window.getSelection) { /* all browsers, except IE 8 and IE 7 */ var selection = window.getSelection(); selection.removeAllRanges(); var range = document.createRange(); range.setStart(element1, 0); range.setEnd(element2, 1); selection.addRange(range); } else { /* works fine in IE 8 / IE 7 */ if (document.body.createControlRange) { var range1 = document.body.createTextRange(); range1.moveToElementText(element1); var range2 = document.body.createTextRange(); range2.moveToElementText(element2); var range = document.body.createTextRange(); range.setEndPoint("StartToStart", range1); range.setEndPoint("EndToEnd", range2); range.select(); } } }
per quanto ne so, non si può fare. l'unico testo che puoi selezionare è in un elemento del modulo (textarea, testo di input ecc.)