javascript - 没有带有 createElement/appendChild 的自动化 tbody?

标签 javascript html dom firebug

使用 javascript createElement/appendChild 创建没有 tbody 的表不会在 Firebug 中添加 tbody,但使用 innerHTML 可以。为什么?我们应该手动添加 tbody 吗?

最佳答案

当使用 DOM 创建方法时,它必须假设您想要的结构与您创建它的方式相同。

如果您想确保在不同的浏览器中具有相同的结构,那么是的,您应该始终手动添加它,即使在 JavaScript 正在解析 HTML 时也是如此。不要依赖浏览器为您插入它,因为浏览器在这方面的行为可能不同。


Here's an example你可以在 Firefox 中运行。

它以这个无效标记开始。

<p>
    <div>original</div>
</p>

<div>被踢出 <p>解析 HTML 时,将其呈现为这样...

<p>‌</p>
<div>original</div>
<p></p>

但是如果我们使用 DOM 方法创建相同的结构,Firefox 不会做任何更正。

var p = document.createElement('p');

p.appendChild(document.createElement('div'))
    .appendChild(document.createTextNode('new'));

document.body.appendChild(p);

所以生成的 DOM 现在是这样的......

<p>‌</p>
<div>original</div>
<p></p>

<p>
    <div>new</div>
</p>

因此您可以看到,即使在结构完全无效的情况下,它也不会进行您在解析 HTML 时看到的更正。

最终,您应该做的不是依赖常见的浏览器调整或更正,因为不能保证它们在浏览器之间是相同的。

使用结构良好且有效的 HTML,您将避免出现问题。

关于javascript - 没有带有 createElement/appendChild 的自动化 tbody?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9053572/

相关文章:

javascript - 如何将 Shift+Click 事件传递到底层输入元素?

javascript - 我的 css 规则适用于所有输入元素,但我在脚本中制作的元素除外

javascript - 在 JavaScript 中选择匹配的动态字段

javascript - AngularJS toastr 在文件上传时显示警报两次而不是一次

javascript - 指令的模板没有获得编译设置的值

java - JLabel 扩展但不换行

php - Dom Xpath 问题

javascript - 单击按钮后如何删除特定的 <li>?

javascript - 如何将范围数据绑定(bind)到使用 Javascript 动态生成的模型?

javascript - 来自模板 ng-repeat 的 AngularJS 子 $http.post