【问题标题】:DOM Add Table Row Where I Want It [duplicate]DOM在我想要的地方添加表格行[重复]
【发布时间】:2012-12-06 07:03:10
【问题描述】:

可能重复:
How to do insert After() in JavaScript without using a library?

目前,此脚本在表格底部添加一行。我如何告诉它在特定行之后添加它?在表的顶部?

<script>
var i = 1;

function changeIt() {
var tr = document.createElement('tr');
var td = tr.appendChild(document.createElement('td'));
td.style.valign = 'middle';

var span = td.appendChild(document.createElement('span'));
span.style.fontWeight = 'bold';
span.appendChild(document.createTextNode('URL ' + i));

td = tr.appendChild(document.createElement('td'));
var input = td.appendChild(document.createElement('input'));
input.name = 'url' + ++i;
input.type = 'text';
input.size = '40'

document.getElementById('myTable').tBodies[0].appendChild(tr);

}
</script>

我一直在搜索 Google 来学习,但我不断遇到 jQuery、innerhtml 和 insertrow 的答案。

【问题讨论】:

  • 你想避免使用 jQuery 吗?
  • 嗯,另一个问题有点接近。肯定有比这更好的骗局。

标签: javascript html dom


【解决方案1】:

您正在寻找node.insertBefore() https://developer.mozilla.org/en-US/docs/DOM/Node.insertBefore

var i = 1;

function changeIt() {
    var tr = document.createElement('tr');
    var td = tr.appendChild(document.createElement('td'));
    td.style.valign = 'middle';

    var span = td.appendChild(document.createElement('span'));
    span.style.fontWeight = 'bold';
    span.appendChild(document.createTextNode('URL ' + i));

    td = tr.appendChild(document.createElement('td'));
    var input = td.appendChild(document.createElement('input'));
    input.name = 'url' + ++i;
    input.type = 'text';
    input.size = '40'
    var node = document.getElementById('myTable').tBodies[0];
    node.insertBefore(tr, node.firstChild);

}

要添加到特定位置,您需要知道.children 中的索引。否则,一些关键标识符(类名、属性或 ID),您可以传递给 getBy 或 QSA。

【讨论】:

  • 如果您想在任何其他位置插入您需要的任何内容,请考虑使用NodeList,因此您返回节点,然后使用insertBefore。另外,考虑使用 jQuery 进行繁重的 DOM 编辑,这并不难。
  • 大声笑,“考虑使用 jQuery”... 为什么?原生 DOM 操作没那么难。当他们显然是语言新手时,不要向 OP 吹嘘使用 Abstraction 库,这只会在以后伤害他们。
  • 此外,IE 对 NodeList 的支持非常糟糕,其中包括空格和 cmets。另一方面,.children 仅包括早期 IE 中的注释节点。更容易处理。
  • 感谢您的建议。您的修改是否假设在顶部添加一行?新行不再出现。
  • 好的。我不得不将 (node.firstChild, tr) 更改为 (tr, node.firstChild)。
猜你喜欢
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 2022-07-29
  • 2015-01-09
  • 2021-07-15
  • 2010-12-01
  • 2015-08-22
  • 2021-03-01
相关资源
最近更新 更多