Xpoint
   [напомнить пароль]

Найти выделенный элемент в дереве

2007-04-10 02:20:41 [обр] Супоницкий Марат [досье]

Есть обычное дерево:

<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 для совсем тупых?

спустя 1 час 26 минут [обр] Владимир Палант [досье]

Так ведь вам нужен не какой-то 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;
Powered by POEM™ Engine Copyright © 2002-2005