Otrzymując następujący kod, otrzymuję błąd INDEX_SIZE_ERR: DOM Exception 1 w linii thisRange.setStart. Kod jest przeznaczony do przechodzenia przez całą stronę, znajdowania instancji searchString, a następnie dodawania linku przed tym ciągiem wyszukiwania. Na przykład, jeśli znajdzie 5 wystąpień ciągu, teraz doda link przed pierwszym, ale potem błąd na drugim i przestanie, pozostawiając cztery słowa bez tego linku. Jakieś pomysły?JavaScript INDEX_SIZE_ERR: Błąd wyjątku DOM 1 dla zakresów
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();
}
}
}
Poprawnie ........ –
W pewnym sensie doszedłem do wniosku, że może to być sytuacja i myśl o kolejności odwrotnej. Nie wiedziałem jednak, jak to zrobić, ponieważ pętle to pętla while za pomocą obiektu RegExp. Jakieś sugestie? – joshholat
Można przechowywać indeksy swoich dopasowań w tablicy i przechodzić po tablicy w osobnej pętli. Zaktualizowałem swoją odpowiedź. – gilly3