我正在遍历一系列英语短语,如果我找到匹配项,使用当前文本节点,我将其替换为non_english数组中的翻译。所有这些都可以100%完成匹配。
但是对于部分匹配,我需要使用.match命令,它允许部分匹配。
我搜索完全匹配的代码是这样的:
var found = $ .inArray(value,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 :(得分:0)
Javascript有一个foreach类型的系统,但它仍然基于一个循环
var array = ['hello', 'world'];
for(var key in array){
alert(array[key]);
}
这是通过数组循环获得的最佳效果,但这种方式也适用于对象
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);