我正在尝试编写一个简单的函数来迭代文本并替换它所遇到的任何href;
var REPLACE = [
{expression: www.anyhref.com, value: 'website'}
];
function(instance) {
instance = function {
var insteadURL;
insteadURL: = REPLACE.match(function(expression) {
return element.classList.contains(expression);
});
return(
insteadURL ? insteadURL.value : getElementText(expression)
);
}
}
我觉得好像我可能没有正确使用匹配方法或条件运算符,但据我所知,这应该可行。但当然不是。
如果你想在文本中替换链接(我猜),试试这个正则表达式:
/<a.*?href="www.anyhref.com".*?\/a>/g
然后,您必须为每个href添加要替换数组中的条目。
如果您在DOM上下文中,则可以执行以下操作:
要遍历DOM,您可以使用此函数:
function domReplace(node, iterator) {
switch (node && node.nodeType) {
case 1: case 9: case 11: {
const newNode = iterator((node.nodeName || '').toLowerCase(), node);
if (newNode && newNode != node && node.parentNode) {
node.parentNode.insertBefore(newNode, node);
node.parentNode.removeChild(node);
}
for (let child = newNode.firstChild; child; child = child.nextSibling)
domReplace(child, iterator);
} break ;
case 3: {
const newNode = iterator('#text', node);
if (newNode && newNode != node && node.parentNode) {
node.parentNode.insertBefore(newNode, node);
node.parentNode.removeChild(node);
}
} break ;
}
}
然后你可以替换a
,如果模式匹配.href
与自定义文本:
domReplace(document, (type, node) => {
if (type == 'a') {
for (let i = 0; i < REPLACE.length; i += 1)
if (~(node.href || '').indexOf(REPLACE[i].expression))
return document.createTextNode(REPLACE[i].value);
return document.createTextNode(node.href);
}
return node;
});
请注意,您不应该将document
提供给domReplace
,而应该使用正确的dom节点以避免完整页面替换