Полезная информация

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№115-10-2006 12:25:54

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Цикл с регами

Я опять со своими регами (наверное некоторых уже достал) но вот в чём проблема:
Есть, к примеру 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)
Но содержимое должно быть не приблизительно равное... Я толком не понял все случаи, когда он не заменяет. Но вот тут он не заменил во втором диве

Отсутствует

 

№215-10-2006 15:09:57

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: Цикл с регами

Похоже на баг, но в 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ентов на части порвет !!!

Отсутствует

 

№315-10-2006 15:47:24

Masletso
Участник
 
Группа: Members
Зарегистрирован: 31-07-2006
Сообщений: 94

Re: Цикл с регами

Спасибо, попробую. Если заработает с меня виртуальное пиво =)
На ИЕ и Оперу мне особо фиолетово - скрипт вызывается из XUL-приложения.

Добавлено Вск 15 Окт 2006 16:14:41 :
Спасибо, тебе. А то я уже думал всё... не решу эту проблему (столько форумов опросил =) )

А я кстати когда тестил, сначала подумал что проблема с регами, и просил выдавать алерт ответ функции test. Тогда он выдавал false, но подсвечивал =) Да... это баг получается =)

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]