Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Firefox插件XUL树中添加和删除行_Javascript_Tree_Firefox Addon_Xul - Fatal编程技术网

Javascript 如何在Firefox插件XUL树中添加和删除行

Javascript 如何在Firefox插件XUL树中添加和删除行,javascript,tree,firefox-addon,xul,Javascript,Tree,Firefox Addon,Xul,在我的Firefox扩展中,我有一个简单的树,它有两列。我试图通过编程: 添加一行 删除所有行 我的XUL树: <tree flex="1" id="mytree" hidecolumnpicker="true"> <treecols> <treecol id="sender" label="Sender" flex="1"/> <treecol id="subject" label="Subject" flex="2"/>

在我的Firefox扩展中,我有一个简单的树,它有两列。我试图通过编程:

  • 添加一行
  • 删除所有行
我的XUL树:

<tree flex="1" id="mytree" hidecolumnpicker="true">

  <treecols>
    <treecol id="sender" label="Sender" flex="1"/>
    <treecol id="subject" label="Subject" flex="2"/>
  </treecols>

  <treechildren>

  </treechildren>

</tree>
这没有错误,树只是没有添加行。我知道代码在运行,因为如果我添加一个
alert()
它就会触发

Javascript我已尝试删除所有行:

var tree = document.getElementById("mytree");

tree.view.data = {};
tree.view.treeBox.rowCountChanged(0, -1);
这会产生一个错误:

document.getElementById(“mytree”).view.treeBox未定义

编辑:

在Wladimir建议直接添加XUL元素之后,这将添加一行:

var treeChildren = document.getElementById("my_tree_children");

var treeitem = document.createElement('treeitem');
var treerow = document.createElement('treerow');

var treecell_1 = document.createElement('treecell');
var treecell_2 = document.createElement('treecell');

treecell_1.setAttribute('label', 'John');
treecell_2.setAttribute('label', 'something');

treerow.appendChild(treecell_1);
treerow.appendChild(treecell_2);

treeitem.appendChild(treerow);

treeChildren.appendChild(treeitem);

虽然在本例中是硬编码的,但单元格(标签属性)的值将来自用户输入。在将用户输入直接放入XUL元素的属性中时,我应该使用什么样的编码/转义方法来防止XSS?

让我这样问:为什么它会工作?文档告诉我们这是一个实例。而
nsITreeView
没有名为
data
的属性。尽管如此,您可以设置此属性并不意味着它将执行任何操作

现在,您实际如何将数据放入
小部件中?说明有几种树类型,根据类型,数据可能来自不同的位置。您可能希望使用默认选项—内容树。这意味着您需要为数据中的每一行创建
treeitem
元素,并将这些元素添加到
treechildren
元素中,如中所示。可以使用常用的DOM方法动态生成这些元素


小部件还可以从RDF或XML数据源自动生成其内容。但是,如果您的数据位于JavaScript对象中,唯一的替代方法是创建一个自定义的
nsITreeView
实现,并将其分配给
树视图。但这并不是很简单,而且通常是一种过分的做法。

我已经尝试了你的建议-请参见问题中的编辑,我仍然无法以这种方式添加行。我认为你添加的行是正确的,它没有任何文本。不,你应该使用而不是
innerHTML
。但这不是这里的问题-要在
treecell
中显示的文本应该放在
label
属性中,请参见。@WladimirPalant您完全正确。它与
setAttribute()
一起工作。最后一个问题-防止XUL属性上出现XSS的最佳做法是什么,因为内容将来自用户输入-请参阅我的编辑。不要使用
innerHTML
:)其他DOM方法不会让您在无意中创建标记。@WladimirPalant感谢您的帮助。如果可能的话,我会投票给你(需要+2代表)@ServerBloke:对不起,我错了+谢谢你的努力。
var treeChildren = document.getElementById("my_tree_children");

var treeitem = document.createElement('treeitem');
var treerow = document.createElement('treerow');

var treecell_1 = document.createElement('treecell');
var treecell_2 = document.createElement('treecell');

treecell_1.setAttribute('label', 'John');
treecell_2.setAttribute('label', 'something');

treerow.appendChild(treecell_1);
treerow.appendChild(treecell_2);

treeitem.appendChild(treerow);

treeChildren.appendChild(treeitem);