2011-02-23 67 views
1

我正在循環訪問英語短語數組,如果我找到與當前文本節點匹配的匹配項,則將其替換爲非英語數組中的翻譯項。所有這些對完全匹配都是100%。如何避免通過數組循環來找到部分匹配?

但是對於部分匹配,我需要使用.match命令,它允許部分匹配。

我的代碼搜索精確匹配是這樣的:

VAR找到= $ .inArray(值,en_lang);

然後,如果有一個找到的值,那麼做文本替換。這種方法很快,我喜歡它。我不得不使用這個循環代碼。

// loop thru language arrays 
for (var x = en_count; x > 0; x--) { 

// assign current from/to variables for replace 
var from = en_lang[x]; 
var to = other_lang[x]; 

// if value match do translation 
if (value.match(from)) { 
    content(node, value.replace(from, to)); 
} 

// mark this node as translated 
if ($.browser.msie == 'false') { 
    $(node).data('translated', 'yes'); 
} 

}

這做工作,但相當緩慢。經過大量研究,我發現我可以通過join命令將英文數組轉換爲基於列表的字符串。

但我無法想出一個函數來搜索此列表中的部分匹配,並返回列表中的位置。

我正在嘗試在2006年創建這個舊的js函數。但我無法弄清楚如何找回正確的位置。

function listfind(list, value, delimiters) { 

    if (!delimiters) { 
     var delimiters = ',' 
    } 

    _TempListSplitArray = list.split(delimiters) 

    var FoundIdx = 0; 

    for (i = 0; i < _TempListSplitArray.length; i++) { 
     if (_TempListSplitArray[i] == value) { 
      FoundIdx = i + 1; 
      break 
     } 
     if (value.match(_TempListSplitArray[i])) { 
      FoundIdx = i + 1; 
      break 
     } 
    } 
    return FoundIdx 
} 

謝謝你的時間。

+0

' :包含'在jquery句柄局部搜索http://api.jquery.com/contains-selector/唯一我能想到的是,它可能無法與非元素很好地工作,所以你可以有一個想法, http://stackoverflow.com/questions/1789945/javascript-string-contains希望它有幫助 – Val 2011-02-23 15:50:52

+0

但是,這是一個選擇器,我已經有了我需要的元素,現在我需要搜索當前文本節點內的部分匹配。 – crosenblum 2011-02-23 15:53:05

+0

是不是有一個原因,你不能只是跳過整個數組的分裂/循環,只是在大字符串上用正則表達式進行查找替換? – epascarello 2011-02-23 16:01:55

回答

0

JavaScript有系統的一個foreach類型,但它仍然基於循環

var array = ['hello', 'world']; 
for(var key in array){ 
    alert(array[key]); 
} 

那是最好的你得到了循環雖然陣列,但這種方式allso與更新的對象

var obj = {'one':'hello', 'two':'world']; 
for(var key in obj){ 
    alert("key: "+key+" value: "+obj[key]); 
} 

工作對您的問題發表評論 您可以直接替換您知道的文字

var str = "hello World"; 
str = str.replace("hello", "Bye bye"); 
alert(str); 
+0

但我的目標是避免循環,因爲它們特別在這種情況下性能很重。 – crosenblum 2011-02-23 16:05:30

+0

對不起,唯一的另一種方式是知道你的陣列的順序,並使用訪問,而不需要通過它。 – Barkermn01 2011-02-23 16:08:56

+0

數組的排序... – crosenblum 2011-02-23 16:14:05