En utilisant le code suivant, j'obtiens une erreur INDEX_SIZE_ERR: DOM Exception 1 sur la ligne thisRange.setStart. Le code est destiné à parcourir une page entière, trouver des instances de searchString, puis ajouter un lien devant cette chaîne de recherche. Par exemple, s'il trouve 5 occurrences de la chaîne, en ce moment il ajoutera le lien devant le premier mais ensuite l'erreur sur le second et s'arrêtera, laissant quatre mots sans le lien. Des idées?Javascript INDEX_SIZE_ERR: DOM Exception 1 Erreur pour les plages
if(searchString.length > 0) { // make sure the string isn't empty, or it'll crash.
// Search all text nodes
for(var i = 0; i < textNodes.length; i++) {
// Create a regular expression object to do the searching
var reSearch = new RegExp(searchString,'gmi'); // Set it to 'g' - global (finds all instances), 'm' - multiline (searches more than one line), 'i' - case insensitive
var stringToSearch = textNodes[i].textContent;
while(reSearch(stringToSearch)) { // While there are occurrences of the searchString
// Add the new selection range
var thisRange = document.createRange();
//alert((reSearch.lastIndex - searchString.length) + " <-> " + reSearch.lastIndex);
thisRange.setStart(textNodes[i], reSearch.lastIndex - searchString.length); // Start node and index of the selection range
thisRange.setEnd(textNodes[i], reSearch.lastIndex); // End node and index of the selection
var myLink = document.createElement('a');
var href = document.createAttribute('href');
myLink.setAttribute('href','http://www.google.com');
myLink.innerText ="GO";
thisRange.insertNode(myLink);
//theSelection.addRange(thisRange); // Add the node to the document's current selection
//thisRange.deleteContents();
}
}
}
Correct ........ –
J'ai en quelque sorte pensé que cela pourrait être ce qui se passe et j'ai pensé à l'ordre inverse. Cependant, je ne savais pas comment faire cela, car les boucles sont une boucle while utilisant l'objet RegExp. Aucune suggestion? – joshholat
Vous pouvez stocker les index de vos correspondances dans un tableau et parcourir le tableau dans une boucle distincte. J'ai mis à jour ma réponse. – gilly3