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