说我有这样的HTML代码:
<script>
// just an example function to get data from input
function getNumber(form) {
var userInput = new Number;
// convert form values into numbers
userInput = Number(form.enteredNumber.value);
return userInput;
}
function countNumbers(form) {
var lastNumber = getNumber(form); // the last number to be counted
for (i = 1; i <= lastNumber; i++) { //count the numbers
document.write(" "+i); // put the numbers on the page
if((i % 10) == 0) {
document.write("<br>"); // insert a break 10 by 10 to create a block of numbers
}
}
}
</script>
<form>
Enter a number:<input type="text" name="enteredNumber"/>
<input type="button" value="Count!" onClick="countNumbers(this.form);"/>
</form>
<div id="numberBlocks"></div>
因此,如果用户输入25,结果将接近我想要的结果,如下所示:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19
20 21 22 23 24 25
但是document.write会清除整个页面,我不希望这样。 如果我使用:
document.getElementById('numberBlocks').InnerHTML = i;
document.getElementById('numberBlocks').InnerHTML = '<br>';
它只会替换元素的内容,我也不想要。 输出将是:
没有或数字&lt; ---因为最后一个元素将是中断标记或数字。
如何做到这一点,在某种程度上,页面内容不会被破坏,输出结果是我想要的?
document.getElementById('numberBlocks').InnerHTML += i
document.getElementById('numberBlocks').InnerHTML = " " + "<br>";
也不起作用,因为它们会覆盖元素而不是添加新元素。
这两个会产生与document.write
相同的结果res = document.getElementById('numberBlocks');
res.innerHTML = res.innerHTML +" "+i;
res = document.getElementById('numberBlocks');
res.innerHTML = res.innerHTML + "<br>";
答案 0 :(得分:1)
如果您不想清除页面或元素内容,则应使用innerHTML
执行此操作:
function getNumber(form)
{
var userInput = new Number;
userInput = Number(form.enteredNumber.value);
return userInput;
}
function countNumbers(form)
{
var lastNumber = getNumber(form);
var res = document.getElementById('numberBlocks');
//res.innerHTML = "";
for (var i = 1; i <= lastNumber; i++)
{
res.innerHTML = res.innerHTML +" "+i;
if((i % 10) == 0)
{
res.innerHTML = res.innerHTML + "<br>";
}
}
}
如果你想清除以前的数据,请取消注释这两行:
//res.innerHTML = "";
答案 1 :(得分:1)
行。在思考和测试了一些事情之后,我自己想出了这个。这样做的正确方法是:
function countNumbers(form) {
var lastNumber = getNumber(form); // the last number to be counted
for (i = 1; i <= lastNumber; i++) { //count the numbers
var spanNode = document.createElement("span");
var textNode = document.createTextNode(" " +i);
spanNode.appendChild(textNode);
var breakNode = document.createElement("br");
document.getElementById("numberBlocks").appendChild(spanNode); // put the numbers on the page
if((i % 10) == 0) {
document.getElementById("numberBlocks").appendChild(breakNode);
}
}
答案 2 :(得分:1)
你经常会遇到这样一个事实:你只想添加一个字符串来表示段落。在这些情况下,很多人使用innerHTML。但是,由于JavaScript的动态特性,您实际上可以向Element对象添加一些行为,如下所示:
Element.prototype.removeAllChildren = function()
{
while( this.firstChild )
this.removeChild( this.firstChild );
};
Element.prototype.setText = function( text )
{
this.removeAllChildren();
var node = document.createTextNode( text );
this.appendChild( node );
};
现在你可以做到这样的事情:
var p = document.getElementById( "myParagraph" );
p.setText( "Hello, i'm a paragraph" );
这比使用dom的innerHTML要干净得多。但是,只要你真的想使用innerHTML,它就会覆盖很多。
答案 3 :(得分:0)
就个人而言,我会使用一个变量来“收集”我想要输出的html。
使用jquery:
function countNumbers(form) {
var html;
var lastNumber = getNumber(form); // the last number to be counted
for (i = 1; i <= lastNumber; i++) { //count the numbers
html += " " +i); // put the numbers on the page
if((i % 10) == 0) {
html += "<br>"
}
}
$('#numberBlocks').html(html);
}
没有jquery:
function countNumbers(form) {
var html;
var lastNumber = getNumber(form); // the last number to be counted
for (i = 1; i <= lastNumber; i++) { //count the numbers
html += " " +i); // put the numbers on the page
if((i % 10) == 0) {
html += "<br>"
}
}
document.getElementById("numberBlocks").innerHTML = html;
}