innerHTML 与 appendChild 有啥区别? 求前端解答。

2015-06-30 16:29:17 +08:00
 ren2881971

背景: 通过js创建table 然后按照bootstrap的样式设置下table。最后在加入div节点中去。

发现用appendChild 将table 加入div节点后 页面样式没有显示
但是用innerHTML 的时候就显示了~。

并且我疑惑的是 我alert出来 table的 html 直接粘贴在页面上还能显示~ 为啥js构建的就不能显示呢? 求前端解答。 

代码如下:

function buildOpenTask(data)
{   /*
var formId = data.formId;
var formTitle = data.formTitle;
var publicDataElementId = data.publicDataElementId;
var firstNode = data.firstNode;
*/
var childList = data.childList;
var _table = document.createElement("table");
_table.className = 'table table-condensed';
for (var i = 0; i < childList.length; i++) {
    var _tr = document.createElement("tr");
    var _td_title = document.createElement("td");
    var _td_input = document.createElement("td");
    _td_title.className = 'info';   
    _td_title.innerHTML = childList[i].dataElementAlias;
    //alert(childList[i].dataElementAlias);

    _tr.appendChild(_td_title);
    _tr.appendChild(_td_input);
    _table.appendChild(_tr);
}
//document.getElementById("openTask").appendChild(_table.);
document.getElementById("openTask").innerHTML = _table.outerHTML;
}
2717 次点击
所在节点    前端开发
4 条回复
otakustay
2015-06-30 17:00:05 +08:00
我怀疑可能是你少了tbody这个元素的关系,用innerHTML的时候会走HTML的解析器,解析器会自动补全tbody,而用js则会严格遵循你的结构吧……
Biwood
2015-06-30 17:19:35 +08:00
楼上说的对,用 DOM 操作的方式操作 table 结构会有问题,我遇到过类似问题,table 结构在浏览器中的解析方式跟你想象的有差别
learnshare
2015-06-30 17:33:59 +08:00
@otakustay +1

浏览器有许多类似的自动补全和填充动作,这就要求你按照标准的风格来写,不要丢掉 tbody
ren2881971
2015-06-30 21:55:09 +08:00
沙发说得对!!
我对比的时候确实发现 debug模式下的 table里有tbody,而 把table ourerHTML alert出来没有tbody!

3q! 已付银币!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/202216

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX