替换文本,但在谷歌chrome扩展内容脚本中保留链接
Replace text but keep links in google chrome extension content scripts
我试图替换谷歌chrome上的单词,但遇到了一个问题。我能够成功地替换特定的单词,但它会杀死相关的html链接。
如何保持链接的有效性并替换文本?
这是我的chrome扩展内容脚本中的代码:
wordDict = {"the":"piano","and":"Hello", "a":"huh?"};
for (word in wordDict) {
document.body.innerHTML = document.body.innerHTML.replace(
new RegExp('''b' + word + '''b',"gi"), wordDict[word]
);
};
我不是regex表达式的专家,所以这是一个在页面上找到一个包含一个单词的超链接并用另一个单词替换它的解决方案。
for(var i = 0, l=document.links.length; i<l; i++) {
if(document.links[i].innerText == "Word"){
document.links[i].innerText = "Other Word";
}
}
有了这个,您可以避免regex,但您仍然需要循环您的words对象。
另一方面,由于您说已经加载了jQuery,所以这个jQuery解决方案实现了您想要的功能,它在所有a标签中查找单词并替换它们。
jQuery.each( wordDict , function( key, value ) {
jQuery( "a" ).each(function(){
if(jQuery(this).text().match(key)) jQuery(this).text(value);
});
});
第一个jQuery每个都循环字符串对象,第二个每个都循环页面上的所有a标记,如果匹配,它会根据对象上的值更改元素文本。
好的!两周后,我终于解决了这个问题。被忽略的是DOM中的子节点。我在下面使用的代码有效地处理了子节点,并保持了脚本的原始外观!
function replaceText(jsonArr) {
$("body *").textFinder(function() {
for (var key in jsonArr) {
var matcher = new RegExp('''b' + key + '''b', "gi");
this.data = this.data.replace(matcher, jsonArr[key]);
}
});
}
// jQuery plugin to find and replace text
jQuery.fn.textFinder = function( fn ) {
this.contents().each( scan );
// callback function to scan through the child nodes recursively
function scan() {
var node = this.nodeName.toLowerCase();
if( node === '#text' ) {
fn.call( this );
} else if( this.nodeType === 1 && this.childNodes && this.childNodes[0] && node !== 'script' && node !== 'textarea' ) {
$(this).contents().each( scan );
}
}
return this;
};
相关文章:
- 我发现了一些只在移动设备上可见的垃圾邮件链接,我可以'找不到包含此垃圾邮件链接的脚本的位置
- 什么's使用链接和脚本标记引用JavaScript源之间的区别
- Javascript:在新页面中打开链接并运行脚本
- 如何通过分配单个变量来减少此脚本中的链接数
- jQuery Pan & Zoom 或 Magnify 脚本,具有热点或图像映射链接的能力
- 是否有脚本/代码可以一次将链接属性添加到多个链接
- 阅读第'页;s从chrome扩展中链接的脚本
- 脚本链接格式以实现跨浏览器兼容性
- 用于浏览器检测和url链接的脚本
- Javascript一页滚动脚本滚动到每个点击的链接一个接一个
- 多个脚本导致链接问题?Javascript、CSS、HTML、Jquery
- 我想更改wordpress标题中的脚本链接.它们在哪里定义
- 在脚本链接标记中使用注释
- 脚本/链接标签与 AJAX 加载
- 如何在新窗口中打开脚本/链接
- 在IE8中单击时,Java脚本链接将消失
- CasperJS不能正确触发动态脚本/链接调用的回调
- 如何从Javascript脚本链接和执行PHP文件
- IF / THEN咖啡脚本链接
- OpenShift -部署的应用程序不会从头标签加载脚本/链接