Использование innerHTML.repalce для замены текста элементом img - PullRequest
0 голосов
/ 22 мая 2010

Я пишу скрипт для добавления дополнительных смайлов в чат Gmail.
Он работает частично, я застрял с методом innerHTML.replace @line 33

Если вы видите, регулярное выражение в методе замены передается с использованием переменной.Вот где сценарий захлебывается.
Если я заменю переменную фактическим регулярным выражением, она будет работать нормально: |

Ответы [ 2 ]

1 голос
/ 22 мая 2010

Каждое закрытие тайм-аута заканчивается самым последним значением для двух переменных, а не значением для текущей итерации.В коде есть только одна итерация, но я предполагаю, что это просто для публикации.Вы можете изменить его на что-то вроде:

for(var i = smileys.length-1; i >= 0; i--) {
    (function(i)
    {
        var smileyRegex = smileys[i][0];
        var smileySrc = smileys[i][1];
        if(node.textContent.match(smileyRegex)) {
            log('match');
            window.setTimeout(function(){
                log(node.innerHTML); log(node.innerHTML.replace(smileyRegex, '<img class="smiley_ext" src="'+smileySrc+'">'));
            },1000);
        }
    })(i);
}

Таким образом, каждый шаг итерации имеет свой собственный набор переменных.Однако я не уверен, действительно ли вам нужен тайм-аут.

0 голосов
/ 22 мая 2010

Вместо

window.setTimeout(function(){
    log(node.innerHTML); 
    log(node.innerHTML.replace(smileyRegex, '<img class="smiley_ext" src="'+smileySrc+'">'));
},1000);

Использовать

(function(smileyRegex, smileySrc) {
    window.setTimeout(function(){
        log(node.innerHTML); 
        log(node.innerHTML.replace(smileyRegex, '<img class="smiley_ext" src="'+smileySrc+'">'));
    },1000);
})(smileyRegEx, smileySrc);

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

...