![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Я опять со своими регами (наверное некоторых уже достал) но вот в чём проблема:
Есть, к примеру 2 массива с регами: a,b. (ну у меня их на самом деле больше) И есть массив divs с HTML-элементами, а именно к примеру с <div> на странице. Надо пробежаться по всему массиву divs и проверить на каждый рег. И найденные реги подчеркнуть.
И возникла проблема. Когда 2 дива с одинаковым содержимым, то оно не подчёркивает (как у нас с дивом 2) Но содержимое должно быть не приблизительно равное... Я толком не понял все случаи, когда он не заменяет. Но вот тут он не заменил во втором диве -------------------- =) |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Такие примеры, которые других ничему особенному не учат и особенностей языка не открывают, разбирают в разделе "для начинающих". (Это написано в заголовке раздела для начинающих (" ...или для неопытного разработчика требуется совет или просьба отыскать ошибку"), но надо будет написать и в основном разделе.) |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
ok, учту. попробую. Порядок не важен, а по-поводу браузеров - это только для Мозиллы так как скрипт вызывается из xul-приложения Добавлено @ 20:40 Подставил именно в этот скрипт - работает. А добавил ещё один массив с регами ( в этот же скрипт), назвал его с, и добавил ещё один цикл для c и скрипт вообще не работает. Пишет что divs[i] is undefined =(( Это сообщение отредактировал(а) Innuendo - 14.10.2006, 21:00 -------------------- =) |
|||
|
||||
| 12345c |
|
|||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Ну в цикле с массивом с, значит, подобная ошибка с выходом за пределы массива. Посмотри на мой код - везде, где значение индекса массива может выйти, там стоит проверка.
|
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
ну вот я вот так добавил:
И кстати, скрипт не работает, если я в одном диве напишу Green Ibrahim - 2 рега из разных массивов... А мне нужно чтоб он подсвечивал абсолютно везде -------------------- =) |
|||
|
||||
| 12345c |
|
||||||
![]() Круглый ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 2018 Регистрация: 26.12.2005 Где: наша не пропадала ? Репутация: 57 Всего: 101 |
Добавлено @ 22:47 Вот так (для случая с 2 массивами). Для больше 2 - цепочка конкатенации увеличивается:
Добавлено @ 22:48
Добавлено @ 22:50 И здесь не предусмотрен случай, если в innerHTML попадётся подстрока, совпадающая с регом. Нужны контекстные проверки в регах (если нужны). |
||||||
|
|||||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Последний случай не подходит =) У меня вообщ-то 5 массивов с регами, и в каждом по 5-6 регов. И если их все сразу в одну проверку запизнуьт, то страница будет пол часа сканить свои элементы, а их там за сотню.
Поэтому я специально разбил на этапы: 1) сначала бежим по элементам, и просто смотрим где совпадениеи если есть, то номер элемента загоняем в объекты 2) объеты делаем в массивы 3) бежим уже по этим массивам - чисто с номерами элементов, где должны быть изменения и там изменяем. А вот почему в моём самом первом случае не заносит в массив, если 2 абсолютно одинаковых содержания элемента к примеру? Там же вроде цикл как надо: пробегаем все элементы (j=0 --> divs.length) , и там уже с каждым элементом пробегаем все циклы по регам... -------------------- =) |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
Урааа! Проблема решена. Это баг всё-таки получается.
Спасибо Anton'у с форуму мозиллы =)
-------------------- =) |
|||
|
||||
| Zeroglif |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Баг говоришь... ну-ну. Передавай привет форуму мозиллы, пусть к нам сюда почаще заходят..., за знаниями, так сказать. Теперь по сути проблемы. Ты используешь в своём скрипте метод объекта RegExp под симпатишным названием test. Согласно EcmaScript (15.10.6.3) - это не что иное как:
То есть по большому счёту за спиной test работает всё тот же наиглавнейший и наиважнейший метод exec, а у exec есть особенность, связанная с флагом g (global), если global=false (флаг не задан), то свойство регулярного по имени lastIndex стоит и не шевелится, а если global=true (флаг задан), lastIndex может перемещаться... В переводе на русский это означает, что если в регулярное мы засунем g, то при каждом вызове метода exec поиск совпадения будет начинаться с последней точки lastIndex. Два примера (в одном g задан, в другом нет):
В первом примере при первом же вызове было найдено число 3 и lastIndex встал в позицию 1. При втором вызове поиск начался уже с позиции 1, и, само собой, число 4 пролетело лесом, нашлось только число 6. Во втором примере lastIndex для второго вызова стоит в позиции 0, и всё находится, как и должно. !!!Несмотря на то, что в твоём примере всё такое циклично-цикличное постоянно меняющееся
Вот как бы так. Предположу, что теперь-то ты все баги должен победить. Это сообщение отредактировал(а) Zeroglif - 15.10.2006, 17:51 |
||||||||
|
|||||||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
я там ещё где-то прочитал, что это так устроен этот test(), если он вернёт true, то следующее что он вернёт false и т.д.
Я ещё когда мучался со скриптом, для проверки добавлял alert(totreg.test(obj)) он выводил false, но подсвечивал!!! а если без алерта этого, то не подсвечивал (не было совпадения) а что если аттрибут действительно нужен? ну я вроде 'g' оставил, и уже работает вроде... -------------------- =) |
|||
|
||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Сейчас работает, а завтра перестанет. Каждому методу - своё место. Я даже не представляю себе, зачем тебе этот скрипт реально нужен, имхо это больше похоже на некое экзаменационное задание на тему - придумайте самый сложный и тернистый путь замены в строке. А можно ведь что-то вроде:
|
||||
|
|||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
этот скрипт тестовый - реги выдуманы и т.д. (в качестве примера всё)
вообще скрипт открывается из xul-приложения и подсвечивает все маты (на русском, на транслите), номера ась, телефонов, словечки ещё разные и т.д. во всех элементах <td> определенного класса =) я с самого начала сделал как в твоём предыдущем скрипте. Но так как там 5 массивов с регами, и около сотни элементов для пробега, он к каждому обращался через innerHTML неведомо сколько раз в цикле и страница была секунды 2 в ступоре пока он это всё делал =) Это сообщение отредактировал(а) Innuendo - 15.10.2006, 22:18 -------------------- =) |
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Понятно. Тогда посмотри сюда, мы там обсуждали самый быстрый кроссбраузерный способ замены символов для транслита. Это по сути почти тот же вариант, что и у тебя, тоже много образцов и т.п. Выбери, что быстрее всего под гекко. |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
cпасибо, почитаю
-------------------- =) |
|||
|
||||
| smartov |
|
|||
![]() свой собственный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4225 Регистрация: 2.2.2006 Где: NJ Репутация: 7 Всего: 259 |
Innuendo, а к чему такие сложности?
Может стоит сделать вот так?
Добавлено @ 22:36 Опера блин закешировала не видел что тут уже ответов куча. Ну пусть код повисит |
|||
|
||||
| Innuendo |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 745 Регистрация: 24.12.2005 Где: Молдова Репутация: 2 Всего: 6 |
smartov,
я с такого варианта начал =) но при сотни переборов, он каждый раз replace'ит innerHTML и тормозит =) а куда пропала кнопка "Вопрос решен"? =) А. сорри, её переместили наверх =) Это сообщение отредактировал(а) Innuendo - 17.10.2006, 13:19 -------------------- =) |
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |