web-dev-qa-db-fra.com

Définir la sélection par plage en Javascript

Je veux sélectionner du texte en envoyant location/anchorOffset et length/offset en utilisant Javascript Voici mon code

  var node = document.getElementById("content");
   var range = document.createRange();
   range.setStart(node, 0);
   range.setEnd(node, 4); // here 0 and 4 is my location and length for the selection
       // if my string is "This is test string" in my case its must select "This" 
   var selection = window.getSelection();
   selection.removeAllRanges();
    selection.addRange(range);

Mais le problème est avec range.setStart et range.setEnd ne fonctionne pas comme je l'attends

19
Shinning River

Les méthodes setStart() et setEnd() de DOM Range sont bien spécifiées, vous pouvez donc trouver la réponse en lisant la spécification ou MDN .

Pour résumer, si vous souhaitez spécifier une limite de plage en termes de décalages de caractères, vous devez traiter avec un nœud de texte plutôt qu'avec un élément. Si votre élément contient un seul nœud de texte, la modification de la première ligne de votre code comme suit fonctionnera:

var node = document.getElementById("content").firstChild;
15
Tim Down

Voici une bonne solution si vous essayez de sélectionner un jeu de résultats jquery

var $newSelection = $('.someElements');
var selection = window.getSelection();
var range = document.createRange();
range.setStartBefore($newSelection.first()[0]);
range.setEndAfter($newSelection.last()[0]);
selection.removeAllRanges();
selection.addRange(range);
13
Charlie