2012-09-03 63 views
0

我嘗試根據替換貼圖替換一些特殊字符(emojis)。
我寫了這段代碼,但它仍然不會工作。用數組鍵替換字符

var char_map = { 
    '■': 'e', 
    '­♥': 'a', 
    '♦': 'm', 
}; 

$.fn.map_replace = function() { 
    $(this).html(function(i, content) { 
     $.each(char_map, function(key, value) { 
      content = content.replace(key, value); 
     }); 
     return content; 
    }); 
}; 

$(".comment").map_replace(); 

This code on jsFiddle

感謝您的幫助,而不是文字來做到這一點是使用轉義代碼:)

+1

你在文件上使用什麼編碼? –

+0

頁面是UTF-8編碼。 – RePLaY

+0

你的代碼實際上正在工作 - 只是替換隻替換了字符的第一個實例(請注意,「Lorem」每次都正確更改)。不幸的是,在這個時候,在這個時候,像這樣使用正則表達式的角色早已不在我身邊了,但那是你的問題。您可以使用任何可以在任何地方找到的大量「replaceAll」片段中的任何一個,以提供您所需的功能。另外,第4行有一個錯誤 - 在IE中,結尾的逗號將會中斷。 – moopet

回答

4

的一種方式Unicode字符,並使用正則表達式替換它們:

var char_map = { 
    'e' : /\u25A0/g, 
    'a' : /\u2665/g, 
    'm' : /\u2666/g, 
}; 

$.fn.map_replace = function() { 
    $(this).html(function(i, content) { 
     $.each(char_map, function(character, regex) { 
      content = content.replace(regex, character); 
     }); 
     return content; 
    }); 
}; 

$(".comment").map_replace(); 

Updated jsFiddle

您最初的方法不起作用的原因是默認情況下,String.replace()僅替換第一個發生的搜索表達式。通過使用正則表達式並指定「g」(用於「全局」)標誌,您可以告訴它替換所有匹配。

+0

非常感謝!那很完美。 – RePLaY