Chrome扩展Javascript变量问题

Chrome扩展Javascript变量问题,javascript,jquery,google-chrome,google-chrome-extension,var,Javascript,Jquery,Google Chrome,Google Chrome Extension,Var,我是js代码的新手(来自php/html/css),我正在尝试为Chrome创建一个个人扩展,允许浏览器用其他单词替换一些单词 所以我有了manifest.json: { "manifest_version": 2, "name": "Name1", "version": "14.3", "description": "Desc1", "browser_action": { "default_icon": "myicon.png", "popup":

我是js代码的新手(来自php/html/css),我正在尝试为Chrome创建一个个人扩展,允许浏览器用其他单词替换一些单词

所以我有了manifest.json:

{
  "manifest_version": 2,
  "name": "Name1",
  "version": "14.3",
  "description": "Desc1",
   "browser_action": {
      "default_icon": "myicon.png",
      "popup": "popup.html"
  },
  "content_scripts": [
         {
            "matches": [
                "http://*/*",
                "https://*/*"
            ],
            "js": [
                "content.js"
            ],
            "run_at": "document_end"
        }  ]
}
然后是我的content.js

var elements = document.getElementsByTagName('*');

for (var i = 0; i < elements.length; i++) {
    var element = elements[i];

    for (var j = 0; j < element.childNodes.length; j++) {
        var node = element.childNodes[j];

        if (node.nodeType === 3) {
            var text = node.nodeValue;
            var replacedText = text.replace(/[wordtoreplace]/gi, '[neword1]');
            var replacedText = text.replace(/[wordtoreplace2]/gi, '[neword1]');
            var replacedText = text.replace(/[wordtoreplace3]/gi, '[neword1]');
            if (replacedText !== text) {
                element.replaceChild(document.createTextNode(replacedText), node);
            }
        }
    }
}
var elements=document.getElementsByTagName('*');
对于(var i=0;i
但是浏览器只替换我的word1,而不是我的word2和3:(
原力帮不上忙,有人可以?

错误在于重新声明和初始化同一变量。 如果声明一个变量并将其初始化为一个值,则在重新声明同一个变量并使用另一个值初始化后,结果将是:

var myVar = "This is the first var"; var myVar = "Second var"; alert(myVar); var myVar=“这是第一个var”; var myVar=“第二个变量”; 预警(myVar); 现在警报结果为“第二个变量”。

重新声明变量在某些高级上下文中是有用的,但对正常编程完全不可用。变量一旦声明,就无法重新声明,因为它不可用,导致程序无法读取。 在任何情况下,如果为每个变量声明初始化值,最后一个将包含实际值

因此,您可以选择以下三行:

var replacedText = text.replace(/[wordtoreplace]/gi, '[neword1]'); var replacedText = text.replace(/[wordtoreplace2]/gi, '[neword1]'); var replacedText = text.replace(/[wordtoreplace3]/gi, '[neword1]'); var replacedText=text.replace(/[wordtoreplace]/gi,[neword1]'); var replacedText=text.replace(/[wordtoreplace2]/gi,[neword1]'); var replacedText=text.replace(/[wordtoreplace3]/gi,[neword1]'); 必须更改为:

var replacedText = text.replace(/[wordtoreplace]/gi, '[neword1]'); replacedText = replacedText.replace(/[wordtoreplace2]/gi, '[neword1]'); replacedText = replacedText.replace(/[wordtoreplace3]/gi, '[neword1]'); var replacedText=text.replace(/[wordtoreplace]/gi,[neword1]'); replacedText=replacedText.replace(/[wordtoreplace2]/gi,[neword1]'); replacedText=replacedText.replace(/[wordtoreplace3]/gi,[neword1]'); <> P>而是重新声明相同的变量,考虑在下面的例子中链式方法:

var text = "word1 word2 word3"; var replacedText =text.replace("word1", "1") .replace("word2", "2") .replace("word3", "3"); alert(replacedText); var text=“word1 word2 word3”; var replacedText=text.replace(“word1”、“1”) .替换(“词语2”、“2”) .替换(“第3”、“3”字); 警报(替换文本); 现在replacedText的内容是“1 2 3”,因为将replace方法应用于字符串意味着获取一个新字符串,可以立即再次应用replace方法,依此类推

:replace中的标志gi表示:

  • g:全球比赛
  • i:不理会这个案子

想想你会如何用你熟悉的语言来做这件事。事情不会是这样的,对吧?也许你知道一种方法可以让js在大写或小写的情况下工作?例如“wordtoreplace”=“wordtoreplace”=“wordtoreplace”ecc?谢谢你again@Lorenzo
i
修饰符使其独立于大小写。谢谢你的帮助,伙计!现在它工作了,但我有一个看起来很难解决的问题:例如,我要替换的单词是“石头”,因此句子=“石头在桌子上”变成“neword在桌子上”。但是句子“我爱火石歌”也变成了“我喜欢fireneword歌曲”。如果单词是“石头”=>replace,有没有办法说?@Lorenzo你有点越界了——最好问一首新的(或者更好,搜索)关于只匹配完整单词的正则表达式。@gaemaf您能解释一下为什么该代码是错误的吗?这样会更有帮助。