使用innerHTML.repalce用img元素替换文本

时间:2010-05-22 14:09:42

标签: javascript regex replace innerhtml

我正在写一个script来为Gmail聊天添加额外的表情 它部分工作,我坚持使用innerHTML.replace方法@line 33

如果你看到,使用变量传递replace方法中的正则表达式。这是剧本窒息的地方 如果我用实际的正则表达式替换变量,它可以正常工作:|

2 个答案:

答案 0 :(得分:1)

每个超时闭包都以两个变量的最新值结束,而不是当前迭代的值。在代码中,只有一次迭代,但我认为只是简化了发布。您可以将其更改为:

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);
}

这样,每个迭代步骤都有自己的一组变量。但是,我不确定你是否真的需要超时。

答案 1 :(得分:0)

而不是

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);

这将创建对值的范围引用,因此它不会受到循环的影响。