ale*_*aiz 0 javascript replace google-chrome-extension tampermonkey
我正在为流行的电子商务SAAS编写Google Chrome扩展程序,该程序将在其管理面板中将英文文本字符串替换为西班牙语.
我已经找到了一个替代一切的解决方案,所以当找到一个href时,它也会取代它,这是不需要的:
var els = document.getElementsByTagName("*");
for(var i = 0, l = els.length; i < l; i++) {
var el = els[i];
// ==Menu_left_dropdown==
el.innerHTML = el.innerHTML.replace(/View your user account/gi, 'Tu cuenta');
el.innerHTML = el.innerHTML.replace(/Terms of service/gi, 'Términos y condiciones');
el.innerHTML = el.innerHTML.replace(/Privacy policy/gi, 'Privacidad');
el.innerHTML = el.innerHTML.replace(/Log out/gi, 'Salir');
// ==Menu_left=
el.innerHTML = el.innerHTML.replace(/Search/gi, 'Buscar');
el.innerHTML = el.innerHTML.replace(/Dashboard/gi, 'Panel');
el.innerHTML = el.innerHTML.replace(/Orders/gi, 'Pedidos');
el.innerHTML = el.innerHTML.replace(/Customers/gi, 'Clientes');
el.innerHTML = el.innerHTML.replace(/Products/gi, 'Productos');
}
Run Code Online (Sandbox Code Playgroud)
按类或ID获取元素并不容易维护,因为它们可能会在没有平台通知我们的情况下进行更改.我还计划添加更多的语言环境,因此任何关于如何采用更清晰的方式来组织字符串的建议都会很棒.
为了避免破坏URL,id,事件处理程序等; 你只需要在TEXT_NODE网页上行动.切勿使用innerHTML.
对文本节点采取行动的有效方法是使用Tree Walker.
对于替换术语,请使用数组.
总而言之,代码如下所示:
var replaceArry = [
[/View your user account/gi, 'Tu cuenta'],
[/Terms of service/gi, 'Términos y condiciones'],
[/Privacy policy/gi, 'Privacidad'],
// etc.
];
var numTerms = replaceArry.length;
var txtWalker = document.createTreeWalker (
document.body,
NodeFilter.SHOW_TEXT,
{ acceptNode: function (node) {
//-- Skip whitespace-only nodes
if (node.nodeValue.trim() )
return NodeFilter.FILTER_ACCEPT;
return NodeFilter.FILTER_SKIP;
}
},
false
);
var txtNode = null;
while (txtNode = txtWalker.nextNode () ) {
var oldTxt = txtNode.nodeValue;
for (var J = 0; J < numTerms; J++) {
oldTxt = oldTxt.replace (replaceArry[J][0], replaceArry[J][1]);
}
txtNode.nodeValue = oldTxt;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5781 次 |
| 最近记录: |