我正在使用 JavaScript 和 XUL 编写一个 Firefox 扩展。我的部分代码需要能够采用一些 XUL 标记并将其动态附加到现有容器元素中。所以基本上我需要 appendChild() 但使用文本字符串而不是 Node 对象。为此,我尝试了此问题中列出的方法。不幸的是,这似乎不起作用。似乎 div.childNodes 返回了一个空的 nodeList,我什至无法将其附加到容器中。错误是
Error: Could not convert JavaScript argument arg 0 [nsIDOMXULElement.appendChild]
我不太确定我做错了什么。有没有办法让这个工作,或者一些替代方法来动态设置容器的标记?
注意:容器元素的类型是richlistbox
.
function updateContainerData(containerName){
try{
var resultsArray = DB.queryAsync("SELECT nodeData FROM waffleapps_privateurl");
container = document.getElementById(containerName);
for (var i = 0; i < resultsArray.length; i++) {
/*
// This works - appending an actual Node ( duplicate from a template)
template = document.getElementById("list-item-template");
dupNode = template.cloneNode(true);
dupNode.setAttribute("hidden", false);
container.appendChild(dupNode);
*/
// This doesn't work
div = document.createElement("div");
//var s = '<li>text</li>';
var s = "<richlistitem id ='list-item-template'><hbox><checkbox label='' checked='true'/> <description>DESCRIPTION</description><textbox>test</textbox><textbox></textbox></hbox></richlistitem>";
div.innerHTML = s;
var elements = div.childNodes;
container.appendChild(elements); // error
}
}
catch(err){
alert( "Error: " + err.message);
}
}
通过使用以下代码,我得到了更进一步的信息。现在我可以在容器中插入 HTML 元素,但似乎 XUL 元素没有正确解析 - 复选框和文本框没有出现。我不确定如何更改它以正确解析 HTML 和 XUL 标记。
var s = "<richlistitem id ='list-item-template'><hbox><checkbox label='' checked='true'/> <description>DESCRIPTION</description><textbox>test</textbox><textbox></textbox></hbox></richlistitem>";
var dp = new DOMParser();
container.appendChild(dp.parseFromString(s, "text/xml").documentElement);