仅替换jQuery函数

时间:2015-06-14 06:02:51

标签: javascript jquery innerhtml

我使用此解决方案替换表情符号列表:

(function($){
   var emojies = ["smile", "smiley", "grin", "joy"];
   var emojiRegex = new RegExp(":("+ emojies.join("|") +"):","g");
   $.fn.toEmoji = function(){
        return this.each(function() {
            this.innerHTML = this.innerText.replace(emojiRegex,function(fullmatch,match){
                return '<span class="emoji '+match.toLowerCase()+'"></span>';
            });                
        });
   };
})(jQuery);
//And use like
$(document).ready(function(){
    $(".content div").toEmoji();
});

但是这会替换所有内容div(this.innerHTML...),但是,我无法做到只需要替换:emoji:而不是所有文本?

因为,如果文本有一个断行,例如:

  

嗨!

     

你好吗?

将替换为:

  

嗨!你好吗?

除了其他问题......那么,怎么办?

1 个答案:

答案 0 :(得分:4)

问题是您正在从DIV中读取innerText,其中不包含<br/>等HTML标记。相反,您可以使用innerHTML来阅读DIV,如下所示:

   $.fn.toEmoji = function(){
        return this.each(function() {
            this.innerHTML = this.innerHTML.replace(emojiRegex,function(fullmatch,match){
                return '<span class="emoji '+match.toLowerCase()+'"></span>';
            });                
        });
   };

注意this.innerHTML.replace而不是this.innerText.replace

JSFiddle:http://jsfiddle.net/ybj7gpn6/(点击按钮后检查HTML以查看跨度 - 看起来像空格)

相关问题