Найти выделенный элемент в дереве
Есть обычное дерево:
<tree id="tree">
<treecols>
<treecol label="Tree" primary="true" />
</treecols>
<treechildren>
<treeitem container="true" id="1">
<treerow>
<treecell label="treeElement1" />
</treerow>
</treeitem>
<treeitem container="true" id="2">
<treerow>
<treecell label="treeElement2" />
</treerow>
</treeitem>
<treeitem container="true" id="3">
<treerow>
<treecell label="treeElement3" />
</treerow>
</treeitem>
</treechildren>
</tree>
Нужно получить id выбранного элемента. Оказалось не так просто, как я думал.
var oTree = Components.classes["@mozilla.org/xul/xul-tree-builder;1"].getService(); oTree.QueryInterface(Components.interfaces.nsITreeSelection); var iId = oTree.currentIndex;
Этот код у меня не работает. Что я делаю не так?
P.s.: Существует ли в природе мануал по работе с компонентами и интерфейсами XPCOM для совсем тупых?
Так ведь вам нужен не какой-то treeBuilder (на самом деле treeView), а конкретный, этого вашего дерева. Смотрим тут, у дерева есть свойство view. У nsITreeView в свою очередь свойство selection — вот вам и выбранный элемент/выбранные элементы. Получается:
var index = document.getElementById("tree").view.selection.currentIndex;
Только это не id — это именно индекс элемента, который может меняться в зависимости от того, какие ветки дерева открыты. Поскольку у вас содержимое дерева задано с помощью treeitem-элементов, то у дерева в данном случае есть свойство contentView типа nsITreeContentView. То есть получить id теперь можно так:
var id = document.getElementById("tree").contentView.getItemAtIndex(index).id;
![[logo]](/site/images/logo.jpg)