Показать сообщение отдельно
  #13 (permalink)  
Старый 11.04.2013, 23:59
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,587

Всё проще: стандартный 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 почём зря), но суть отражает.
__________________
29375, 35

Последний раз редактировалось Aetae, 12.04.2013 в 00:31.
Ответить с цитированием