2015-06-14 2 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...), однако, нет никакого способа, я он и просто заменит: emoji: и не весь текст?

Потому что, если текст имеет линию разрыва, для бывших:

Привет!

Как дела?

Заменит для:

Привет! Как дела?

В дополнение к другим проблемам ... Итак, как это сделать?

+0

Может включать пример '' .content div' html'? – guest271314

+0

'

Some :grin: text :joy:
' – Igor

ответ

4

Проблема в том, что вы читаете из DIV как innerText, который не будет содержать теги HTML, такие как <br/>. Вместо этого, вы можете прочитать из 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

Perfect !!! Чем ты! – Igor

Смежные вопросы