Javascript只解析数组的最后一个元素

时间:2017-10-12 21:04:18

标签: javascript

有一个问题,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被忽略。香港专业教育学院尝试了我能找到的所有“解决方案”,但都有同样的问题。

2 个答案:

答案 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()之前。