Puis-je simuler une sélection de texte avec la souris en JavaScript?
-
07-07-2019 - |
Question
Je souhaite sélectionner du texte sur la page en simulant un bouton gauche de la souris et en le faisant glisser vers l'emplacement x, y spécifié (en pixels)
Cela peut-il être fait avec JavaScript?
La solution
Je ne pense pas qu'il soit possible de contrôler la souris de cette manière à l'aide de JavaScript.
Cependant, vous pouvez sélectionner des parties d'un document directement à l'aide de JavaScript. Par exemple:
var h3s = document.getElementsByTagName("h3");
var range = document.createRange();
range.selectNode(h3s[0]);
window.getSelection().addRange(range);
sélectionnerait le premier élément h3.
Voir aussi: http://www.quirksmode.org/dom/range_intro.html pour plus d’informations sur les gammes de construction.
Pour sélectionner le corps entier d'un document, vous pouvez utiliser:
var body = document.getElementsByTagName("body")[0];
var range = document.createRange();
range.selectNode(body);
window.getSelection().addRange(range);
Pour sélectionner le 3ème caractère, par exemple, le 4ème paragraphe d'un document, essayez:
var p4 = document.getElementsByTagName("p")[3].firstChild;
var range = document.createRange();
range.setStart(p4, 2);
range.setEnd(p4, 3);
window.getSelection().addRange(range);
Autres conseils
/** * 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(); } } }
autant que je sache, cela ne peut pas être fait. le seul texte que vous pouvez sélectionner se trouve dans un élément de formulaire (textarea, texte saisi, etc.)