2015-06-14 42 views
3

我使用這種解決方案取代emojies的列表:替換的jQuery功能文本中的一部分

(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...),但是,有沒有辦法,我做它只是取代:表情符號:而不是所有的文字?

因爲,如果文本有一個分界線,爲前:

嗨!

你好嗎?

將爲替換:

嗨!你好嗎?

除了其他問題...所以,該怎麼辦?

+0

可以包括例如'。內容div''html'的? – guest271314

+0

'

Some :grin: text :joy:
' – Igor

回答

4

問題是您正在從DIV讀取innerText,其中不包括像<br/>這樣的HTML標記。相反,你可以從DIV與innerHTML像這樣寫着:

$.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點擊按鈕後看到的跨度都存在 - 看起來像空格)

+1

完美!比你! – Igor