|
модифицировать скрипт поиска
данный код рассматривался не раз на данном сайте,однако решения небыло найдено.Задача-модифицировать скрипт поиска таким образом ,чтобы поиск происходил только по тексту контента страницы,например только в тегах h1 или p.В данном скрипте ниже наблюдается поломка кода HTML,содержащего текст,например ломаются атрибуты title и alt картинок на странице в своих текстовых значениях.
<script type="text/javascript">
var lastResFind=""; // последний удачный результат
var copy_page=""; // копия страницы в исходном виде
function TrimStr(s) {
s = s.replace( /^\s+/g, '');
return s.replace( /\s+$/g, '');
}
function FindOnPage(inputId) {//ищет текст на странице, в параметр передается ID поля для ввода
var obj = window.document.getElementById(inputId);
var textToFind;
if (obj) {
textToFind = TrimStr(obj.value);//обрезаем пробелы
} else {
alert("Введенная фраза не найдена");
return;
}
if (textToFind == "") {
alert("Вы ничего не ввели");
return;
}
if(document.body.innerHTML.indexOf(textToFind)=="-1")
alert("Ничего не найдено, проверьте правильность ввода!");
if(copy_page.length>0)
document.body.innerHTML=copy_page;
else copy_page=document.body.innerHTML;
if (textToFind.length < 3) {
alert("Введите не менее 3-х символов!");
return;
}
document.body.innerHTML = document.body.innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола
document.body.innerHTML = document.body.innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='background:grey'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем;
lastResFind=textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки
window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению
}
</script>
<h2>JavaScript поиск по странице</h2>
<input type="text" id="text-to-find" value="">
<input type="button" onClick="javascript: FindOnPage('text-to-find'); return false;" value="Искать"/>
<br/><i>Введите слово или фразу для поиска.</i>
<hr/>
|
Если document.body заменить на document.getElementById("") тогда возвращает только один элемент, т.к. id должен быть уникален.Если подставить document.querySelectorAll('.one') то почему то не работает.Где ошибка?
<!doctype html>
<html>
<head>
<script type="text/javascript">
var lastResFind=""; // последний удачный результат
var copy_page=""; // копия страницы в исходном виде
function TrimStr(s) {
s = s.replace( /^\s+/g, '');
return s.replace( /\s+$/g, '');
}
function FindOnPage(inputId) {//ищет текст на странице, в параметр передается ID поля для ввода
var obj = window.document.getElementById(inputId);
var textToFind;
if (obj) {
textToFind = TrimStr(obj.value);//обрезаем пробелы
} else {
alert("Введенная фраза не найдена");
return;
}
if (textToFind == "") {
alert("Вы ничего не ввели");
return;
}
if(document.querySelectorAll('.one').innerHTML.indexOf(textToFind)=="-1")
alert("Ничего не найдено, проверьте правильность ввода!");
if(copy_page.length>0)
document.querySelectorAll('.one').innerHTML=copy_page;
else copy_page=document.querySelectorAll('.one').innerHTML;
if (textToFind.length < 3) {
alert("Введите не менее 3-х символов!");
return;
}
document.querySelectorAll('.one').innerHTML = document.querySelectorAll('.one').innerHTML.replace(eval("/name="+lastResFind+"/gi")," ");//стираем предыдущие якори для скрола
document.querySelectorAll('.one').innerHTML = document.querySelectorAll('.one').innerHTML.replace(eval("/"+textToFind+"/gi"),"<a name="+textToFind+" style='background:grey'>"+textToFind+"</a>"); //Заменяем найденный текст ссылками с якорем;
lastResFind=textToFind; // сохраняем фразу для поиска, чтобы в дальнейшем по ней стереть все ссылки
window.location = '#'+textToFind;//перемещаем скрол к последнему найденному совпадению
}
</script>
</head>
<body>
<body>
<h2>JavaScript поиск по странице</h2>
<input type="text" id="text-to-find" value="">
<input type="button" onClick="javascript: FindOnPage('text-to-find'); return false;" value="Искать"/>
<br/><i>Введите слово или фразу для поиска.</i>
<hr/>
<p class="one">
text1 content content content content content content content content content content content content content content content content content
</p>
<p class="one">
text2 content content content content content content content content content content content content content content content content content
</p>
<p class="one">
text3 content content content content content content content content content content content content content content content content content
</p>
<p class="one">
text4 content content content content content content content content content content content content content content content content content
</p>
</body>
</html>
|
Цитата:
|
окей, что делать? Как сделать выборку? пробовал getElementsByClassName() тоже не работает и тоже возвращает обьект типа NodeList.Какие варианты?
|
Цитата:
|
Цитата:
|
не имею опыта перебирать в цикле.Могу найти только по индексу тега
|
Цитата:
|
перебрал, нашёл ,что дальше?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<div>
<h3>p теги с текстом</h3>
<p>Первый абзац</p>
<p>Второй абзац</p>
</div>
<script>
var pElements = document.getElementsByTagName("p");
for (var i = 0; i < pElements.length; i++) {
alert("Текст параграфа: " + pElements[i].innerText + " нашёл");
}
</script>
</body>
</html>
|
Цитата:
|
| Часовой пояс GMT +3, время: 19:34. |
|