2013-10-28 41 views
0

今天我刚入学了Javascript基础知识,还有一个问题是我遇到了麻烦。

这次演习是做一个HTML页面的文本框(在这里我必须把一些x)和一个按钮,当我点击按钮后,页面应该使用1形成有星号三角形的x' document.write'功能。

我能做到这一点很好,但问题是,我需要能够重复使用此功能,就像如果我再次更改文本框的数量和点击按钮,一个新的三角形应建立和以前的内容也必须保存。

我必须只使用文件撰写来实现这一点,但使用document.write删除所有以前的内容,所以在新创建的页面在“头部”的脚本不存在。

任何人都可以建议我什么?

Here's my code.脚本内的Javascript document.write

+1

使用window.open显示输出在新窗口中,它可能会在这种情况下工作 – Shadow

回答

1

获取body元素的HTML并将新模式附加到此HTML并将其写入文档。

var bodyHtml = document.body.innerHTML; 
var newHtml = ""; 
//create new pattern and save in newHtml variable 

Document.write(bodyHtml + < br /> + newHtml); 
+1

很好的回答,但它并不能解释为什么。显然,这是一个正在学习语言的学生,一些解释会很长。 –

1

document.writeMDN documentation),从像文件的头部的脚本标签的情况下调用时,会事先打电话document.openMDN documentation),这将重新初始化文件,覆盖任何以前的内容。但是,如果你还没有叫document.opendocument.close明确之后document.write调用不会覆盖先前写的内容。

可以保存你以前写在一个变量的文件,你可以事先打电话document.open。像下面这样:

var ShowOnPage = '<input type="text" id="text1" />' + '<input type="button" value="Click Me" onClick="CreateTriangle()" /> <br/>'; 
    function CreateTriangle() { 
     var x = parseInt(document.getElementById("text1").value); 
     for (i = 1; i <= x; i++) { 
      for (j = 1; j <= i; j++) { 
       ShowOnPage += "*"; 
      } 
      ShowOnPage += "<br/>" 
     } 
     document.open(); 
     document.write(ShowOnPage); 
     document.close(); 
    } 

注意ShowOnPage创建之外的功能创建一个三角形,并与中要点击之间保持周围输入的值进行初始化。还请注意在document.write调用周围使用document.opendocument.close


请注意,为什么在这里需要document.write?这是而不是你会这样实现的方式,并教导几乎从来没有在真实情况下使用的东西如document.write的使用没有增加web开发的知识。

通过引入innerHTMLgetElementById并调整某个元素like in this fiddle的内容,可以获得相同的概念。

+0

我不得不同意你在''document.write''问题上。但可悲的是,这可能是他们的老师从几年前写的一本JavaScript书中学到的。他们应该学习使javascript特别的东西,这当然不是''document.write''。 – moritzpflaum

+0

当使用'document.write'时,在文档被关闭的情况下document.open可以被调用_implicit_。已完全加载到DOM)。所以如果在dom没有准备好的时候调用document.write',那么它将被插入到当前脚本执行被启动的地方,或者即使用'setTimeout(...)'调用它,如果例如文档使用块编码进行传输,并且仍有待处理的块。 –

+0

这是个大问题,她特意告诉我们不要使用innerHTML,而是要找到一种方法来使用document.write – Legjendat