2012-09-03 5 views
0

교체 맵을 기반으로 일부 특수 문자 (이모티콘)를 대체하려고합니다.
나는이 코드 조각을 쓴하지만 여전히 작동하지 ..배열 키/값으로 문자 대체

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

한 가지 방법을 도와 유니 코드 문자는 정규 표현식을 사용하여 대체 :

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"("global") 플래그를 지정함으로써 모든 일치를 대체하도록 지시 할 수 있습니다.

+0

고마워요! 저건 완벽 해. – RePLaY