我是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]
}
}
答案 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
}
答案 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)
return
,而不仅仅是更改编辑至于我在这里找不到正确的工作代码,我想建议我的
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;
}