有一个问题,str.replace只能在我的数组的最后一个元素中工作 这是数组:
["omao","carlton","judging"]
这是我的javascript函数
function emoji(data){
//console.log(data);
$(".message-content").each(function(){
var elem = $(this);
var str = elem.html();
//var res = str.replace(":hey", '<img draggable="false" class="emoji jumboable" alt="emoji" src="https://discordchat.com/api/omao.png">');
for(var i = 0;i < data.length; i++){
var res = str.replace(":"+data[i], '<img draggable="false" title="Added using the WLA Poor Mans Nitro" class="emoji jumboable" alt="emoji" src="https://discordchat.com/api/'+data[i]+'.png" />');
elem.html(res);
}
});
}
运行时,只有:judging
被图片替换,:omao
和:carlton
被忽略。香港专业教育学院尝试了我能找到的所有“解决方案”,但都有同样的问题。
答案 0 :(得分:3)
你遇到的问题是你在原始字符串上重复替换,而不是在已经改变的字符串上,这就是为什么只有最后一次迭代是被设置的那个
您可以像这样更改
var str = elem.html();
for(var i = 0;i < data.length; i++){
str = str.replace(":"+data[i], '<img draggable="false" title="Added using the WLA Poor Mans Nitro" class="emoji jumboable" alt="emoji" src="https://discordchat.com/api/'+data[i]+'.png" />');
}
// and set it only once
elem.html(res);
答案 1 :(得分:0)
更改
elem.html(res);
到
elem.append(res);
如果多次运行(例如.click()),您需要将elem.empty()
放在.each()
之前。