You are doing it wrong.
Нормальные люди делают это через Selection/Range. |
Пытался я мудрить с innerText + Range. Ничего не получилось. Не нашел я возможности задать выделение используя позиции символов (setStart, setEnd принимают индексы дочерних узлов, а не символов). Не говоря уже о Firefox..
Aetae, если можно - вкратце алгоритм. Или ссылочку. |
Всё проще: стандартный window.find в связке с getSelection, пусть браузер всё делает за нас. =)
Примерно так: <!DOCTYPE html> <html lang="ru-RU"> <head> <meta charset="UTF-8"> <script type="text/javascript"> superfind = function(){ var surround = document.createElement('span'); surround.style.background='#f00'; return function( str ){ var sel = getSelection(); // получаем выделение sel.removeAllRanges(); // обнуляем его if(surround.hasChildNodes()){ //если ужк есть выделение sel.collapse(surround.nextSibling,0); // ставим в позицию конца предыдущего поиска, если есть(^_^ для новых поисков обнуление не предусмотрено) var temp = document.createDocumentFragment(); while(surround.hasChildNodes()) temp.appendChild(surround.firstChild); surround.parentNode.replaceChild( temp,surround); //возвращаем как было(^_^ тут может быть баг при нахожении одного в другом) } while(sel.isCollapsed){ //ищем пока что-нить не найдёт в документе(а не в input) if(!find( str )){ //и пока документ не закончится return false } } var range = sel.getRangeAt(0); //получаем range range.surroundContents(surround); //оборачиваем найденное sel.collapse(surround,1); //схлопываем выделение return true } }(); </script> </head> <body> <p> Шизофрени́я (от др.-греч. σχίζω — раскалываю и φρήν — ум, рассудок), ранее лат. Dementia praecox («преждевременное слабоумие») — полиморфное психическое расстройство или группа психических расстройств, связанное с распадом процессов мышления и эмоциональных реакций. Шизофренические расстройства в целом отличаются характерными фундаментальными расстройствами мышления и восприятия, а также неадекватным или сниженным аффектом. Наиболее частыми проявлениями болезни являются слуховые галлюцинации, параноидный или фантастический бред либо дезорганизованность речи и мышления на фоне значительной социальной дисфункции, нарушении работоспособности. Многообразие симптоматики породило дебаты о том, является ли шизофрения единым заболеванием или представляет собой диагноз, за которым кроется ряд отдельных синдромов. Эта неоднозначность была отражена при выборе названия: Блейлер использовал множественное число, именуя болезнь шизофрениями. </p> <input type="button" value="Найти" onclick="superfind(nextSibling.value)"/><input type="text" value="шизо"/> </body> </html> Набросал на скорую руку, потому подводные камни ещё есть(surroundContents я бы вообще не использовал, имхо не стоит трогать dom почём зря), но суть отражает. |
Часовой пояс GMT +3, время: 06:54. |