我想构建一个Chrome应用程序,它可以找到看起来像电话的所有字符串,并用链接替换它们。我想只发生文本元素,因此它不会破坏应用程序运行的网站上的javascript函数。
这是我到目前为止所做的:
var regex = /((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}(?!([^<]*>)|(((?!<a).)*<\/a>))/g;
var text = $("body:first").html();
text = text.replace(regex, "<a href=\"https://www.mylink.com/number=$&\">$&</a>");
$("body:first").html(text);
但如果有javascript则会中断
答案 0 :(得分:0)
是的,您的代码只检索DOM当前状态的标记表示,并覆盖它,丢失所有事件绑定和许多其他重要数据。
您需要做的是遍历所有文本节点。单独使用sizzle选择器无法访问文本节点,因此您需要依赖jQuery的contents()
函数。
您可以执行以下操作来获取所有文本节点:
Deferred