Javascript:一些JS问题

时间:2011-07-29 04:50:38

标签: javascript createelement

我正在学习这些东西,并试图理解它,所以我使用它而不是innerhtml。

我的代码:

  <script>
function load() {
"use strict";

var t  = document.createElement("table"),
    tb = document.createElement("tbody"),
    tr = document.createElement("tr"),
    td = document.createElement("td");

    var b = document.createElement("b");
b.appendChild(document.createTextNode(" name!"));
td.appendChild(document.createTextNode("Hello"));
td.appendChild(b); 

    t.style.width = "100%";
    t.style.borderCollapse = 'collapse';
    t.border=1;

    // note the reverse order of adding child        
    tr.appendChild(td);
    tb.appendChild(tr);
    t.appendChild(tb);

   // more code to populate table rows and cells
   document.getElementById("theBlah").appendChild(t);
alert(t.innerHTML);
   }
</script>
 </head>

 <body  onload="load()">

问题是,onload()没有显示<table>标记,而是显示<tbody>而不是......知道为什么?

最后,在这段代码中:

var t  = document.createElement("table"),

 tb = document.createElement("tbody"),
 tr = document.createElement("tr"),
 td = document.createElement("td");

即使我正在使用Var关键字仅用于t,而不是其他用户,为什么即使“use strict”打开也不抱怨?事实上,如果我在“tb”之前添加“var”,“tr”,“td”然后它会抛出错误... 谢谢!

2 个答案:

答案 0 :(得分:4)

1)innerHTML就是这样。它是inner。它不包含元素本身的HTML,而是包含该元素内的所有html。还有一个名为outerHTML的属性,但它不包含在Firefox中。获取outerHTML的唯一交叉浏览器方式是将节点包装在新的父节点中并获取节点innerHTML。您不能只抓住当前父级的innerHTML(您必须创建一个新的父级),除非您确定该元素没有兄弟姐妹,因为如果您这样做,则会包括兄弟姐妹。

2)您使用逗号分隔变量装饰。这与使用分号并在每一行放置var相同。

答案 1 :(得分:0)

即使不符合规范,InnerHtml也会更快。它就像上面的人所说的内部html而不是元素。

使用一个Var和逗号分隔变量装饰是一个好主意,  1.减少文件大小,
 2.将所有变量声明在顶部。 (to avoid hoisting problem