用新节点替换 DOM 节点。

发布于 2024-12-01 06:13:20 字数 875 浏览 1 评论 0 原文

我有一组 DOM 节点,想用新的 DOM 节点替换。 由于我将信息传递到函数中的方式,我只有一个名为 collection 的变量,它是一个充满 HtmlTableRowElements 的对象,我想用一个名为 Rows 的新变量替换它。

这是我所拥有的

var parent = collection[0].parentNode;
parent.innerHTML = "";
parent.appendChild(rows);

,但这给了我一个很长的奇怪错误。

未捕获的异常:[异常...“无法转换 JavaScript 参数 arg 0 [nsIDOMHTMLTableSectionElement.appendChild]” nsresult:“0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)”位置:“JS 框架 :: http://127.0.0.1/test.php :: :: 第 103 行”数据:否]

所以我也尝试过

collection[0].parentNode.innerHTML = "";
collection[0].parentNode.appendChild(rows);

返回

集合[0].parentNode为空

我确实理解为什么第二个选项返回错误。我想第一个选项会返回错误,因为我已经删除了变量引用的元素。

我开始认为寻找父级并替换其内容并不是解决此问题的方法。

有什么帮助吗?

I have a collection of DOM nodes I would like to replace with new DOM nodes.
Due to the way I pass the information into the function I only have a variable named collection which is an object full of HtmlTableRowElements and I would like to replace it with a new variable called Rows.

Here is what I have

var parent = collection[0].parentNode;
parent.innerHTML = "";
parent.appendChild(rows);

however this gives me a long strange error.

uncaught exception: [Exception... "Could not convert JavaScript argument arg 0 [nsIDOMHTMLTableSectionElement.appendChild]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: http://127.0.0.1/test.php :: :: line 103" data: no]

So I have also tried

collection[0].parentNode.innerHTML = "";
collection[0].parentNode.appendChild(rows);

which returns

collection[0].parentNode is null

I do understand why the second option is returning an error. I would imagine the first option is returning an error because I have removed the element the variable is referencing.

I'm beginning to think that looking for the parent and replacing it's contents is not the way to go about this.

any help?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

失眠症患者 2024-12-08 06:13:20

rows 中有什么?我无法从你的问题中看出

  • 如果它是一个数组,请将内容放入文档片段中并附加:

    varfragment = document.createDocumentFragment();
    for (var i = 0, l = rows.length; i < l, i++) {
        fragment.appendChild(行[i]);
    }
    
    父级.appendChild(片段);
    

    将一堆元素放入文档片段中比将它们逐一附加到文档中的某些内容更快,并且是携带元素集合(而不是数组)的好方法。

  • 如果是字符串,请使用innerHTML

    parent.innerHTML = rows;
    

当您调用 collection[0].parentNode.innerHTML = "" 时,集合将从文档。它仍然存在只是因为您在 JavaScript 变量中保留了它,但不再具有父节点。您仍然应该能够提前获取 parent (就像在第一个示例中所做的那样),并向其附加内容:

var parent = collection[0].parentNode;
parent.innerHTML = "";
parent.appendChild(rows);

What is in rows? I can't tell from your question

  • If it’s an array, put the contents into a document fragment and append that:

    var fragment = document.createDocumentFragment();
    for (var i = 0, l = rows.length; i < l, i++) {
        fragment.appendChild(rows[i]);
    }
    
    parent.appendChild(fragment);
    

    Putting a bunch of elements in a document fragment is faster than appending them to something in the document one by one, and is a good way to carry around a collection of elements (instead of an array).

  • If it’s a string, use innerHTML:

    parent.innerHTML = rows;
    

When you call collection[0].parentNode.innerHTML = "", collection gets removed from the document. It still exists only because you’re holding onto it in a JavaScript variable, but no longer has a parent node. You should still be able to grab parent in advance (like you do in the first example), and append things to it:

var parent = collection[0].parentNode;
parent.innerHTML = "";
parent.appendChild(rows);
爱的十字路口 2024-12-08 06:13:20

parent.innerHTML = ""; 是清除内容的一种方法。然后,您必须迭代其他元素并附加它们:

for(var i = 0, l = rows.length; i < l; i++) {
    parent.appendChild(row[i]);
}

但据我所知,以这种方式附加新行可能会出现问题。最好使用 table.insertRow [MDN]

parent.innerHTML = ""; is one way to clear the content. You then have to iterate over the other elements and append them:

for(var i = 0, l = rows.length; i < l; i++) {
    parent.appendChild(row[i]);
}

But afaik it might be problematic to append new rows this way. It might be better to use table.insertRow [MDN].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文