Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Скрипт: поиск по странице сайта. Не работает... (https://javascript.ru/forum/css-html-browser/9733-skript-poisk-po-stranice-sajjta-ne-rabotaet.html)

ivIvan 03.06.2010 15:43

Скрипт: поиск по странице сайта. Не работает...
 
Попался скрипт поиска по странице сайта. Наверное древний, но в IE8 работает (поиск по слову, части слова, min 2-м буквам), а вот в Opere и Firefox нет. Доработайте, пожалуйста...

<form name="search" onSubmit="return findInPage(this.string.value);">
<font size=3><input name="string" type="text" size=15 onChange="n = 0;"></font>
<input type="submit" value="Поиск">
</form>

<script language="JavaScript">

var NS4 = (document.layers);
var IE4 = (document.all);

var win = window;
var n = 0;

function findInPage(str) {

var txt, i, found;

if (str == "")
return false;

if (NS4) {

if (!win.find(str))
while(win.find(str, false, true))
n++;
else
n++;

if (n == 0)
alert("Not found.");
}

if (IE4) {
txt = win.document.body.createTextRange();

for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}

if (found) {
txt.moveStart("character", -1);
txt.findText(str);
txt.select();
txt.scrollIntoView();
n++;
}

else {
if (n > 0) {
n = 0;
findInPage(str);
}

else
alert("Not found.");
}
}

return false;
}

</script>

Gvozd 03.06.2010 15:53

даже не знаю с чего начать.
пойду по порядку:
1)
Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
2)
Цитата:

Сообщение от ivIvan
Наверное древний

невероятно.
настолько, что никто в здравом уме его дорабатывать не станет.
проще и правильней с нуля написать
3)
Цитата:

Сообщение от ivIvan
Доработайте, пожалуйста...

Это работа, и за нее обычно платят деньги.
Для таких сообщений предназначен раздел форума "Работа".

Если вы все же хотите, чтобы вам помогли - приложите какие-то усилия сами и задавайте вопросы по ходу дела.

ivIvan 03.06.2010 16:18

Цитата:

Сообщение от Gvozd
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

С этим все нормально...

Дело в том, что скрипт в IE8 работает, а нашел я его в свободном доступе... Просто из других скриптов с такой же функцией (поиск по текущей странице) попадалась одна хрень...

Вопросы "по ходу дела" задавать не могу, т.к. в теме "0".
Спасибо за установление срока "древности"...

Gvozd 03.06.2010 16:21

Цитата:

Сообщение от ivIvan
С этим все нормально...

вообще-то нет.
вы все еще не привели свое первое сообщение в читаемый вид.
Цитата:

Сообщение от ivIvan
Вопросы "по ходу дела" задавать не могу, т.к. в теме "0".

раз вы "0" в теме, и не собираетесь прикладывать усилия, то вам в раздел "Работа"

ivIvan 03.06.2010 16:33

Прикладываю усилия:

Цитата:

Сообщение от ivIvan
<form name="search" onSubmit="return findInPage(this.string.value);">
<font size=3><input name="string" type="text" size=15 onChange="n = 0;"></font>
<input type="submit" value="Поиск">
</form>

Находится в <body>...</body>, позиционирование: левый нижний угол браузера (fixed).

<script language="JavaScript">...</script> в HEAD.

Gvozd 03.06.2010 16:46

Цитата:

Сообщение от ivIvan
Прикладываю усилия:

это вы не прикладываете усилия по модификации скрипта.
Это вы его просто используете.
Тут особо негде напрячься

ivIvan 03.06.2010 16:52

Цитата:

Сообщение от ivIvan
<script language="JavaScript">

var NS4 = (document.layers);
var IE4 = (document.all);

Я так понимаю, этот кусок имеет отношение к IE и FF, только указаны старые версии?

Gvozd 03.06.2010 17:09

Цитата:

Сообщение от ivIvan
Я так понимаю, этот кусок имеет отношение к IE и FF, только указаны старые версии?

к IE и Netscape Navigator
ныне мертв.
а цифры в именах переменных ничего не означают, в плане проверки
и не в этих строчках основная проблема

ivIvan 03.06.2010 17:23

Все, вопросы кончились.
Буду искать другой скрипт для Opera и FF

Octane 03.06.2010 17:26

Хм… а никто не знает, с каких версий появилась глобальные функция find в Chrome и Safari?
В Fx она давно. Сейчас подводит только Opera, в 10-й версии все еще нет window.find и уже нет document.selection.createRange().findText…

ivIvan,
поиск текста в браузерах, не поддерживающих TextRange, очень затруднен, приходится работать с текстовыми узлами, а слова могут быть разбиты на несколько узлов, и пробельные символы браузер не все отображает, из-за чего алгоритм становится очень сложным, это не 2 строчки кода подсказать, написание такого скрипта — это уже работа.


-----------
В Safari 3.2 есть функция find, для большинства проектов ниже этой версии нет смысла делать поддержку, на старые версии Chrome в принципе никто и не ориентируется. Значит в аутсайдерах новая Opera…


Часовой пояс GMT +3, время: 18:26.