Показать сообщение отдельно
  #1 (permalink)  
Старый 10.07.2009, 15:25
Аспирант
Отправить личное сообщение для Pattern Посмотреть профиль Найти все сообщения от Pattern
 
Регистрация: 13.05.2009
Сообщений: 37

Поиск фразы по тексту
Привет всем!
Кто может помочь с теорией (или примером), а то я что то уже запутался в край.
Итак, есть простой HTML-код:
<html>
<head>
<title>Test Search</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="javascript">
//возвращает список textnode заданого node
function TNList(node,list){
	for(var a=0;a<node.childNodes.length;a++){
		if(node.childNodes[a].nodeType==3)
			list.push(node.childNodes[a]);
		else
			TNList(node.childNodes[a],list);
	}
}
//поиск и выделение объекта (DOM)
function search_and_select(b,str){
	var ltn=new Array();
	TNList(b,ltn);
	for(var a=0;a<ltn.length;a++){
		if(ltn[a].nodeValue.indexOf(str)!=-1){
			var s=window.getSelection();
			var r=document.createRange();
			r.setStart(ltn[a],ltn[a].nodeValue.indexOf(str));
			r.setEnd(ltn[a],ltn[a].nodeValue.indexOf(str)+str.length);
			s.removeAllRanges();
			s.addRange(r);
			alert('Found!');
		}else{
			alert('Not Found');
		}
	}
}
//инициализация
var init=function(){
	var str='text into';
	search_and_select(document.body,str);
};
</script>
</head>
<body onload="init();">
	<div id="child1">Any text into div <span id="child11">and text into span</span> tags</div>
</body>
</html>

По коду понятно, что при загрузке страницы будет произведён поиск фразы 'text into' по всем textnod'ам рекурсивно, находящихся в body. Всё бы хорошо, если поиск будет производиться только внутри textnod'ов. Но что, если, например, понадобится найти фразу 'div and text', у которой начало начинается в одной textnod'е, а окончание в другой? В теории всё понятно

setStart(document.getElementById('child1').firstChild,14);
setEnd(document.getElementById('child11').firstChild,8);

А вот как это практически реализовать что то никак сообразить не могу.
Есть у кого какие мысли по этому поводу?
Ответить с цитированием