使用JavaScript重写HTML元素的内容

时间:2013-07-09 00:10:05

标签: javascript dom

我是JS的新手,无法理解如何使这段代码工作。我正在尝试覆盖整个html源文本。

var oldSource = document.documentElement.innerHTML;
alert(oldSource); //this works, it gets the whole html

document.write(Change(oldSource)); //doesn't work, writes undefined

   function Change(source){
     for (i = 0; i <= source.length; i++){
     source[i] = "S"; // doesn't change the source[i]
   }
}

6 个答案:

答案 0 :(得分:2)

您正在更改变量oldSource的值,而不是documentElement.innerHTML的值。

.innerHTML just returns a string that contains the serialised content of that element.它不会返回对DOM中内容的引用。

此外,document.write(Change(oldSource))表示将Change(oldSource)的返回值写入文档...但您的Change()函数不返回任何内容,因此它是undefined

最后,字符串是不可变的,这意味着在创建后不能更改其内容。相反,您需要在函数中构建一个新字符串,如下所示:

function Change(source){
   new_source = ""
   for (i=0; i < source.length; i++){
     new_source = new_source + "S"; //doesn't change the source[i]
   }
   return new_source
}

You can check all of this out in this jfiddle.

答案 1 :(得分:0)

你的for循环后需要return( source );

答案 2 :(得分:0)

在JavaScript中,此行:var oldSource = document.documentElement.innerHTML;innerHTML复制到oldSource变量中。它不会保存对innerHTML的引用。

您正在修改oldSource中存储的值,但从不将其应用于文档。

Change函数中,您不会返回任何值 - 这就是您获得undefined的原因。添加“返回来源; in your更改”功能以返回值。

另一个问题是你无法在JavaScript中更改字符串。你应该为此创建一个新变量。您无法编辑source[i] - 您只能检索那里的值。

答案 3 :(得分:0)

JavaScript字符串是不可变的。你不能使用

source[i]="S";

修改字符串。您需要构建一个新字符串并将其返回。

它也应该是< source.length

答案 4 :(得分:0)

  1. 您的功能必须return,而不仅仅是更改
  2. 您不能以这种方式更改字符串,而是使用.replace()方法
  3. 如果您指定真正需要做什么,我们的帮助可能会更有效
  4. 编辑至于我在这里找不到正确的工作代码,我想建议我的

    function Change(source){
       var str = source.split("");
       for (var i=0; i<source.length; i++){
         str[i] = "S";
       }
       return str.join("");
    }
    

    也许这不是最快的方式(但是,为什么不这样)但是它可以让你在问题中尝试使用索引。

    working fiddle Lego Stormtroopr

    EDIT2 this example显示如何在循环内的一行中执行此操作(不创建额外变量)

       for (var i=0; i<source.length; i++){
         source = source.replace(new RegExp(source[i]), "S");
       }
    

答案 5 :(得分:0)

您需要返回如下所示的新源代码字符串;

var oldSource = document.documentElement.innerHTML;
alert(oldSource); //this works, it gets the whole html

document.write(Change(oldSource)); //doesn't work, writes undefined

function Change(source){
     for (i=0; i<=source.length; i++){
         source[i]="S"
     }
     return source;
}