2012-03-10 63 views
0

我試着用這個的jsfiddle有純文本,以取代所有的笑臉圖片:「代碼」標籤內更換圖片

http://jsfiddle.net/44mqG/4/

正如你可以看到我嘗試使用:

$("code").each(function() { 
    var a = ['<img class="smile" src="http://static.yamma.org/images/icons/smile.png">', '&lt;img class="laugh" src="http://static.yamma.org/images/icons/laugh.png"&gt;'], 
     b = [":)", ":D"], 
     inner = $(this).children('img').size(); 
    for (var d = 0; d < inner; d++) { 

     var c = $(this).html(); 
     var e = c.replace(a[d], b[d]); 
     $(this).text(e) 
    } 
});​ 

但是,這隻取代每個圖像的第一個笑臉。 再經過已經換成笑臉的沒有替代者返回:

&amp;amp;lt;img class="smile" src="http://static.yamma.org/images/icons/smile.png"&amp;amp;gt; &amp;amp;lt;img class="laugh" src="http://static.yamma.org/images/icons/laugh.png"&amp;amp;gt; 

我不明白爲什麼它的加入&放大器; LT;

有沒有解決方案呢?有沒有人有另一種想法如何將某些笑臉圖像替換爲純文本。

回答

0

這裏是你的答案:

$('img').each(function(){ 
    switch($(this).attr('class')){ 
     case "smile": 
      $(this).replaceWith(':)'); 
      break; 
     case "laugh": 
      $(this).replaceWith(':D'); 
      break; 
    } 
}); 

這裏是DEMO

0

您是試圖更換整個圖像標籤還是將文字笑臉作爲圖像標籤的文本?我不確定第二種選擇是否合理,但它在我看來就像你的代碼在做什麼。下面是一些代碼,做的是:http://jsfiddle.net/44mqG/5/

這裏的代碼與新跨越的標籤替換整個標籤:http://jsfiddle.net/44mqG/6/

0

但這僅替換每個圖像的第一笑臉

String.replace作品這辦法。爲了替換所有的出現,你需要用全局標誌(g)代替RegExp,或者在一個循環中進行。

我不明白爲什麼要加上& amp; lt;

監守你得到的HTML(var c = $(this).html();),然後以文字形式寫回($(this).text(e)

1

爲了解決你的問題的最後一部分,另外的辦法,我可以爲您提供:

var emotions = { 
    'smile' : ':)', 
    'laugh' : ':D' 
}; 

var img = $('code img').each(
    function(){ 
     var s = this.src.split('/').pop(), 
      emo = s.substring(0,s.lastIndexOf('.')); 
     if (emo == 'laugh' || emo == 'smile'){ 
      console.log(emotions[emo]); 
      $(this) 
       .replaceWith('<span class="emotion">' + emotions[emo] + '</span>'); 
     } 
    });​ 

http://jsfiddle.net/davidThomas/44mqG/8/