Javascript:AppendChild

时间:2011-07-28 23:29:48

标签: javascript appendchild

我正在学习appendChild并且到目前为止已经提出了这段代码:

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

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

td.appendChild(document.createTextNode(blah));

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

document.getElementById("theBlah").appendChild(t);
<div id="theBlah">d</div>

但这给我一个错误Uncaught TypeError: Cannot call method 'appendChild' of null。我做错了什么?

6 个答案:

答案 0 :(得分:22)

尝试将JavaScript包装在onload函数中。首先添加:

<body onload="load()">

然后将你的javascript放在加载函数中,所以:

function load() {
    var blah="Blah!";
    var t  = document.createElement("table"),
    tb = document.createElement("tbody"),
    tr = document.createElement("tr"),
    td = document.createElement("td");

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

    td.appendChild(document.createTextNode(blah)); 

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

   document.getElementById("theBlah").appendChild(t);
}

答案 1 :(得分:11)

在页面完成加载之前正在运行脚本。这就是document.getElementById(“theBlah”)返回null的原因。

要么使用类似jQuery的东西,要么只使用像

这样的东西
<script>
window.onload = function () {
    var blah="Blah!";
    var t  = document.createElement("table"),
    tb = document.createElement("tbody"),
    ...
    //the rest of your code here
};
</script>

答案 2 :(得分:7)

问题是document.getElementById("theBlah")返回null。原因是您的代码在创建theBlah元素之前运行。您应该将代码放在onload事件处理程序中。

答案 3 :(得分:2)

正确的方法(行和列和随机的innerText是由din设置的......) 这种方式不是最短的,而是以最快的方式建立一个表。 它也是一个带有thead的完整表格,并填充了随机文本

1.使用原生javascript(不会减慢jquery)

2.(function(){})()在加载正文之前执行代码

3.并且在功能之外的其他变量没有问题

4.并传递文件,以便你有更短的变量

5.有一种方法可以通过使用克隆节点来缩短功能...但它速度较慢,可能并不是所有浏览器都支持

6.createDocumentFragment()创建tr。如果你有很多行,这有助于更快地构建DOM。

(function (d) {
    var rows = 10,
        cols = 3,
        t = d.createElement('table'),
        the = d.createElement('thead'),
        tb = d.createElement('tbody'),
        tr = d.createElement('tr');
    t.style.width = "100%";
    t.style.borderCollapse = 'collapse';
    for (var a = 0; a < cols; a++) {
        var th = d.createElement('th');
        th.innerText = Math.round(Math.random() * 100);
        tr.appendChild(th);
    };
    the.appendChild(tr);
    var f = d.createDocumentFragment();
    for (var a = 0; a < rows; a++) {
        var tr = d.createElement('tr');
        for (var b = 0; b < cols; b++) {
            var td = d.createElement('td');
            td.innerText = Math.round(Math.random() * 100);
            tr.appendChild(td);
        }
        f.appendChild(tr);
    }
    tb.appendChild(f);
    t.appendChild(the);
    t.appendChild(tb);
    window.onload = function () {
        d.body.appendChild(t)
    };
})(document)

答案 4 :(得分:1)

我相信您可以使用defer属性将JavaScript链接到html。

<script src="script.js" defer></script>

这样,您的JavaScript直到页面加载后才能运行。

答案 5 :(得分:-2)

让自己和我们一个忙,并使用JQuery。一切都变得简单了。

$('div.SomeDiv').append($('<table></table>').css('width','100%').append($('<tbody></tbody>').append($('<tr></tr>').append($('<td></td>').html("Blah Text"))))); // Everything else you want to add here...