2013-04-17 2 views
0

Я нашел этот сценарий: (смотреть вниз для заметок)Преобразование текста Для смайликов JS

(function($){ 
    $.fn.emotions = function(options){ 
     $this = $(this); 
     var opts = $.extend({}, $.fn.emotions.defaults, options); 
     return $this.each(function(i,obj){ 
      var o = $.meta ? $.extend({}, opts, $this.data()) : opts;      
      var x = $(obj); 
      // Entites Encode 
      var encoded = []; 
      for(i=0; i<o.s.length; i++){ 
       encoded[i] = String(o.s[i]).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); 
      } 
      for(j=0; j<o.s.length; j++){ 
       var repls = x.html(); 
       if(repls.indexOf(o.s[j]) || repls.indexOf(encoded[j])){ 
        var imgr = o.a+o.b[j]+"."+o.c;   
        var rstr = "<img src='"+imgr+"' border='0' />"; 
        x.html(repls.replace(o.s[j],rstr)); 
        x.html(repls.replace(encoded[j],rstr)); 
       } 
      } 
     }); 
    } 
    // Defaults 
    $.fn.emotions.defaults = { 
     a : "images/emotions/",   // Emotions folder 
     b : new Array("angel","colonthree","confused","cry","devil","frown","gasp","glasses","grin","grumpy","heart","kiki","kiss","pacman","smile","squint","sunglasses","tongue","unsure","upset","wink"),   // Emotions Type 
     s : new Array("o:)",":3","o.O",":'(","3:)",":(",":O","8)",":D",">:(","<3","^_^",":*",":v",":)","-_-","8|",":p",":/",">:O",";)"), 
     c : "gif"     // Emotions Image format 
    }; 
})(jQuery); 


// Notes 
// a - icon folder 
// b - emotions name array 
// c - image format 
// x - current selector 
// d - type of selector 
// o - options 

Этот скрипт преобразует текст эмоций. например, :) =>smiley

Когда я вызываю функцию так:

$("#chat").emotions(); 

все работает нормально, и :) становится:

<img src="images/emotions/smile.png" border="0" alt=""> 

Но когда я вызываю функцию, как это:

$("#chat .chatText").emotions(); 

:) становится:

<img src="images&lt;img src='images&lt;img src='images&lt;img src='images&lt;img src='images&lt;img src='images&lt;img src='images&lt;img src='images/emotions&lt;img src='images/emotions/snowman.png' border='0' alt='' /&gt;.png' border='0' alt='' /&gt;emotions&lt;img src='images/emotions/watermelon.png' border='0' alt='' /&gt;.png' border='0' alt='' /&gt;emotions/can.png' border='0' alt='' /&gt;emotions/liquor.png' border='0' alt='' /&gt;emotions/blowkiss.png' border='0' alt='' /&gt;emotions&lt;img src='images/emotions/qq.png' border='0' alt='' /&gt;.png' border='0' alt='' /&gt;emotions&lt;img src='images/emotions/beauty.png' border='0' alt='' /&gt;.png' border='0' alt='' /&gt;emotions/smile.png" border="0" alt=""> 

Мой HTML выглядит следующим образом:

<div id="chat"> 
    <div class="message"> 
     <p>...</p> 
     <p class="chatText"> 
      ... 
     </p> 
    </div> 
    <div class="message"> 
     <p>...</p> 
     <p class="chatText"> 
      ... 
     </p> 
    </div> 
</div> 

Как я могу решить эту проблему?

Большое спасибо, и извините за мой английский.

ответ

0

Работы для меня, когда я попробовал его в jsfiddle

<div id="chat"> 
    <div class="message"> 
     <p>...</p> 
     <p class="chatText"> 
      ... :) 
     </p> 
    </div> 
    <div class="message"> 
     <p>...</p> 
     <p class="chatText"> 
      ... :) 
     </p> 
    </div> 
</div> 

(function($){ 
    $.fn.emotions = function(options){ 
     $this = $(this); 
     var opts = $.extend({}, $.fn.emotions.defaults, options); 
     return $this.each(function(i,obj){ 
      var o = $.meta ? $.extend({}, opts, $this.data()) : opts;      
      var x = $(obj); 
      // Entites Encode 
      var encoded = []; 
      for(i=0; i<o.s.length; i++){ 
       encoded[i] = String(o.s[i]).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;'); 
      } 
      for(j=0; j<o.s.length; j++){ 
       var repls = x.html(); 
       if(repls.indexOf(o.s[j]) || repls.indexOf(encoded[j])){ 
        var imgr = o.a+o.b[j]+"."+o.c;   
        var rstr = "<img src='"+imgr+"' border='0' />"; 
        x.html(repls.replace(o.s[j],rstr)); 
        x.html(repls.replace(encoded[j],rstr)); 
       } 
      } 
     }); 
    } 
    // Defaults 
    $.fn.emotions.defaults = { 
     a : "http://www.sherv.net/cm/emo/laughing/",   // Emotions folder 
     b : ["crying-laughter-smiley-emoticon"],   // Emotions Type 
     s : [":)"], 
     c : "gif"     // Emotions Image format 
    }; 
})(jQuery); 


// Notes 
// a - icon folder 
// b - emotions name array 
// c - image format 
// x - current selector 
// d - type of selector 
// o - options 


$("#chat .chatText").emotions(); 
+0

Wired! возможно, это происходит, потому что я загружаю его с помощью ajax? 'успех: функция (данные) { $ ('# chat #messages'). Html (data); $ ("# chat .chatText"). Emotions(); } ' – HtmHell

+0

Не могу понять, почему. Я не могу выполнить ajax, но я сделал код симулировать что-то подобное, см. Обновленный jsfiddle, он все еще работает – Xotic750

+0

Что я вижу, так это то, что вы ссылаетесь на #messages в команде выше, но с этим id в html вы ничего не делаете предоставлена. – Xotic750

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