2010-11-19 78 views
4

取代多個特殊字符目前,這會從textarea的文字和替換是在字符表中指定的所有字符:搜索和使用jQuery

<form> 
<textarea name="text" id="text" style="width:300px; height:200px;"></textarea><br /> 
<input type="button" name="submit" id="submit" value="submit" /> 
</form> 

var charMap = { 
    "Å":'x', 
    "å":'y', 
    "b":'z', 
    "c":'f' 
}; 

$('#submit').click(function() { 

    var str = $('#text').val(); 
    var str_array = str.split(''); 

    for(var i = 0, len = str_array.length; i < len; i++) { 
     str_array[ i ] = charMap[ str_array[ i ] ] || str_array[ i ]; 
    } 

    foo = str_array.join(''); 
    $('#text').val(foo); 

}); 

的問題是,它並不能識別特殊字符。所以它將取代'b'和'c',但不是'Å'和'å'。

任何想法?

+2

你的意思是這些具體的替代品,或者將換行字母與字母末尾的'n'字母(其中'n'是字母表中當前字母的位置)? – Hamish 2010-11-19 23:59:52

+0

@Hamish - 我想要那些具體的替代品 – DaveKingsnorth 2010-11-20 00:52:33

回答

2

現在,我理解的要求更好,你可以只創建地圖的字符到置換是這樣的:

實施例:http://jsfiddle.net/gaG28/2/

var charMap = { 
    a:'z',b:'v',c:'n',d:'s',e:'d', 
    f:'k',g:'e',h:'y',i:'j',j:'r', 
    k:'f',l:'m',m:'a',n:'c',o:'q', 
    p:'t',q:'g',r:'i',s:'b',t:'p', 
    u:'l',v:'u',w:'h',x:'o',y:'w',z:'x' 
}; 
var str = "abcdefghijklmnopqrstuvwxyz"; 

var str_array = str.split(''); 

for(var i = 0, len = str_array.length; i < len; i++) { 
    str_array[ i ] = charMap[ str_array[ i ] ] || str_array[ i ]; 
} 
str = str_array.join(''); 

這也將留下任何在地圖中找不到的字符。

+0

太好了。我遇到的唯一問題是我想用'å'替換一些特殊字符,如'å'。當我嘗試使用這些字符是返回一個沒有。 – DaveKingsnorth 2010-11-20 01:36:10

+0

非常感謝帕特里克,但您的修改對我無效,請在原始問題中查看我的編輯。 – DaveKingsnorth 2010-11-20 01:52:41

+0

@Dave - 它似乎爲我工作。 [這裏有一個更新的例子](http://jsfiddle.net/gaG28/3/)與你引用的字符問題。如果'Å:'Å''不適合您,請嘗試將該鍵放在引號中,如'「​​Å」:'Å''。當把鍵放在引號中時,幾乎任何字符都應該被接受,因爲它們是鍵名。 – user113716 2010-11-20 02:30:24

2

由於.replace()作用於一個字符串,並返回一個字符串,就可以鏈接多個一起更換電話:

var text = $(this).val().replace(/a/g, "z").replace(/b/g, "y").replace(/c/g, "x"); 
+0

我也想過這樣做,但我想用一個正則表達式來做 – DaveKingsnorth 2010-11-20 00:00:58

+0

@DaveKingsnorth嗯......好的。我試圖想,如果甚至可以使用JS正則表達式。 – Alex 2010-11-20 00:04:00

0

您的原始代碼是正確的,但問題是由於該網頁的字符集,請嘗試以下操作:

  1. 確保您的頁面保存爲UTF-8
  2. 包括在以下的頭

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

我頭同樣的問題刮傷,這解決了我的問題。