0

我是 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]
   }
}
4

6 回答 6

2

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

.innerHTML 只返回一个包含该元素的序列化内容的字符串。它不会返回对 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
}

你可以在这个 jfiddle 中检查所有这些。

于 2013-07-09T00:12:19.780 回答
0
  1. 你的功能必须return有所改变,而不仅仅是改变
  2. 您不能以这种方式更改字符串,请改用.replace()方法
  3. 如果您指定您真正需要做什么,我们的帮助可能会更有效

编辑就我在这里找不到正确的工作代码而言,我想建议我的

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

也许这不是最快的方式(虽然,为什么不),但它可以让您在问题中尝试使用索引进行操作。

乐高 Stormtroopr工作的小提琴

EDIT2这个例子展示了如何在循环内的一行中做到这一点(不创建额外的变量)

   for (var i=0; i<source.length; i++){
     source = source.replace(new RegExp(source[i]), "S");
   }
于 2013-07-09T00:24:10.220 回答
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;
}
于 2013-07-09T00:25:09.587 回答
0

在 JavaScript 中,这一行:var oldSource = document.documentElement.innerHTML;将 复制innerHTMLoldSource变量中。它不保存对innerHTML.

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

在您的Change函数中,您不返回任何值 - 这就是您获得undefined. 添加一个'返回源; in yourChange`函数返回一个值。

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

于 2013-07-09T00:16:18.350 回答
0

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

于 2013-07-09T00:14:11.540 回答
0

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

source[i]="S";

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

它也应该如此< source.length

于 2013-07-09T00:21:40.570 回答