Javascript 如何使替换代码正常工作?

Javascript 如何使替换代码正常工作?,javascript,jquery,Javascript,Jquery,我试图创建一个基本的替换代码,每次都替换匹配项 (function($) { $.fn.replace = function(obj) { var a = $(this).html(); for (var i in obj) { $(this).html(a.replace(i, obj[i])); } }; $('#myDiv').replace({ ':\)': '<img

我试图创建一个基本的替换代码,每次都替换匹配项

(function($) {
    $.fn.replace = function(obj) {
        var a = $(this).html();
        for (var i in obj) {
            $(this).html(a.replace(i, obj[i]));
        }
    };
    $('#myDiv').replace({
        ':\)': '<img src="http://bit.ly/dbtoez" />'
    });
})(jQuery);​
(函数($){
$.fn.replace=功能(obj){
var a=$(this.html();
用于(obj中的var i){
$(this.html)(a.replace(i,obj[i]);
}
};
$('#myDiv')。替换({
':\)': ''
});
})(jQuery);​

​但它不起作用。另外,当我在对象中放入更多属性以替换div时,它就不起作用了。img元素是一张笑脸。

除了最后一张,你基本上是在扔掉所有的替代品。在循环中修改
a
,并在最后更新HTML:

var a = $(this).html();
for (var i in obj) {
    a = a.replace(new RegExp(i, 'g'), obj[i]);
}
$(this).html(a);
小提琴:

(函数($){
$.fn.replace=功能(obj){
var a=$(this.html();
用于(obj中的var i){
a=a.replace(新的RegExp(i.replace(/([.?*+^$[\]\\(){}}-])/g,“\\$1”),“g”),obj[i]);
}
返回$(this.html(a);
};
})(jQuery);
$('#myDiv')。替换({
':)': ''
});​

最后版本。它将为您转义所有字符。:)

这是可行的,但如何使它在每次看到笑脸时都进行替换:)?您需要使用全局regexp,而不是现在进行的字符串替换。我是否将其用作
.replace()
调用中对象属性的名称?噢,snap,没有注意到它是一个对象-您可能无法使用regex对象作为属性名。。。我已更新我的答案。
未捕获的语法错误:无效的正则表达式:/:)/:不匹配')”
获取最新版本。更好,没关系。当我对
)“
符号进行双重转义时,它起作用了。@David这是最终版本。用这个。记得投票并接受!谢谢替换文字字符串时,
a.split(search).join(replacement)
比regexp好得多。
(function($) {
    $.fn.replace = function(obj) {
        var a = $(this).html();
        for (var i in obj){
           a = a.replace(new RegExp(i.replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1"), "g"), obj[i]);
        }
        return $(this).html(a);
    };
})(jQuery);

$('#myDiv').replace({
    ':)': '<img src="http://bit.ly/dbtoez" />'
});​