Страницы: 1
Я опять со своими регами (наверное некоторых уже достал) но вот в чём проблема:
Есть, к примеру 2 массива с регами: a,b. (ну у меня их на самом деле больше)
И есть массив divs с HTML-элементами, а именно к примеру с <div> на странице.
Надо пробежаться по всему массиву divs и проверить на каждый рег. И найденные реги подчеркнуть.
<html> <head> <script> <!-- function mytest(){ var a = new Array(/green/gi, /white/gi, /black/gi, /yellow/gi, /red/gi); var b = new Array(/nicolay/gi, /sereja/gi, /vasea/gi, /ibrahim/gi, /petea/gi); var divs = document.getElementsByTagName("div"); var a2 = {}; var b2 = {}; var aa = []; var bb = []; var i,j; for (j=0; j<divs.length; j++){ for (i=0; i<a.length; i++){ if (a[i].test(divs[j].innerHTML)) a2['~' + j]=true; } for (i=0; i<b.length; i++){ if (b[i].test(divs[j].innerHTML)) b2['~' + j]=true; } } for(i in a2) { if(i.charAt(0)!='~') continue; aa.push(i.substr(1)); } for(i in b2) { if(i.charAt(0)!='~') continue; bb.push(i.substr(1)); } // zamena // if (aa.length!=0){ for (j=0; j<aa.length; j++){ var tempStr = divs[aa[j]].innerHTML; for (i=0; i<a.length; i++){ tempStr=tempStr.replace(a[i], (function(x) {return '<u>' + x + '</u>'})) } divs[aa[j]].innerHTML = tempStr; } } if (bb.length!=0){ for (j=0; j<bb.length; j++){ var tempStr = divs[bb[j]].innerHTML; for (i=0; i<b.length; i++){ tempStr=tempStr.replace(b[i], (function(x) {return '<u>' + x + '</u>'})) } divs[bb[j]].innerHTML = tempStr; } } } window.onload = mytest; //--> </script> </head> <body> <div> test green and black </div> <div> test green and black </div> <div> vasea da petea test</div> <div> i nicolay k tomu je </div> </body>
И возникла проблема. Когда 2 дива с одинаковым содержимым, то оно не подчёркивает (как у нас с дивом 2)
Но содержимое должно быть не приблизительно равное... Я толком не понял все случаи, когда он не заменяет. Но вот тут он не заменил во втором диве
Отсутствует
Похоже на баг, но в IE и Opera ситуация аналогичная. Чтобы работало, меняем
... for (i=0; i<a.length; i++){ if (a[i].test(divs[j].innerHTML)) a2['~' + j]=true; } ...
на
... for (i=0; i<a.length; i++){ if (a[i].test(divs[j].innerHTML)) { a2['~' + j]=true; f=a[i].test(divs[j].innerHTML) } } ...
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Спасибо, попробую. Если заработает с меня виртуальное пиво
На ИЕ и Оперу мне особо фиолетово - скрипт вызывается из XUL-приложения.
Добавлено Вск 15 Окт 2006 16:14:41 :
Спасибо, тебе. А то я уже думал всё... не решу эту проблему (столько форумов опросил )
А я кстати когда тестил, сначала подумал что проблема с регами, и просил выдавать алерт ответ функции test. Тогда он выдавал false, но подсвечивал Да... это баг получается
Отсутствует
Страницы: 1