Показать сообщение отдельно
  #3 (permalink)  
Старый 14.01.2009, 15:19
Новичок на форуме
Отправить личное сообщение для <Pool> Посмотреть профиль Найти все сообщения от <Pool>
 
Регистрация: 11.01.2009
Сообщений: 5

Приведу решение, вдруг кому поможет.
Задача была следующая: 2 фрейма. В нижнем мы выбираем html файл в верхнем он отображается. В нижнем вводим ключевое слово, жмём кнопку, в верхнем эти слова подсвечиваются подсвечивается. Итак коды для JavaScript.


//Находит и подсвечивает выбранные слова.
function FindNlightKeywords()
{
    var searchWords = document.getElementById('inputKeywords').value;
	
	if(searchWords && searchWords!='')
	{   
	    var body = window.parent.frames[0].document.body;
	    
	    if(body)
		{   
		    if(initialBody)
            {
                body.innerHTML = initialBody;
            }
            else
            {
                initialBody = body.innerHTML;
            }
		    
			FindTextNodes(body,searchWords)
		}
	}
}


//Находит текстовые ноды документа.
function FindTextNodes(node,searchWord)
{
    var childItem =0;
    while(node.childNodes[childItem])
    {
        if(node.childNodes[childItem].nodeType==3)
        {
            childItem = LightKeywords(node,childItem,searchWord);
        }
        else
        {
            FindTextNodes(node.childNodes[childItem],searchWord);
        }
        childItem++;
    }
}


//Подсвечивает текстовые ноды, содержащие ключевые слова.
function LightKeywords(mainNode,childItem,searchWord)
{
    node = mainNode.childNodes[childItem];
    
    var startIndex = node.nodeValue.indexOf(searchWord);
    var endIndex = searchWord.length;
    
    if(startIndex!=-1)
    {
        var secondNode = node.splitText(startIndex);
        var thirdNode = secondNode.splitText(endIndex);
        
        var formatterSpan = mainNode.ownerDocument.createElement('span');
        formatterSpan.style.background="yellow";
        formatterSpan.innerHTML = searchWord;
        
        mainNode.replaceChild(formatterSpan,mainNode.childNodes[childItem+1]);
        
        childItem = childItem*1+2;
        
        if(mainNode.childNodes[childItem] && mainNode.childNodes[childItem].nodeValue.indexOf(searchWord)!=-1)
        {
            childItem = LightKeywords(mainNode,childItem,searchWord);
        }
    }
    
    return childItem;
}

Последний раз редактировалось <Pool>, 14.01.2009 в 16:47.
Ответить с цитированием