tree auslesen

worst_case

Grünschnabel
Hallo,

ich versuche mich gerade an einem eigenen Add-on für den Firefox.
Ich habe einen Baum den ich je nach Selektion auslesen will.
Anbei mein tree


<tree id="myTree" flex="1" hidecolumnpicker="false" seltype="single" class="tree" rows="5">
<treecols id="myTree-treeCols">
<treecol id="myTree-treeCol0" primary="true" flex="2" label="Maschine"
persist="width" ordinal="1"/>
<splitter class="tree-splitter" ordinal="2"/>
</treecols>
<treechildren>
<treeitem container="true" open="true">
<treerow><treecell label="Z"/></treerow>
<treechildren>
<treeitem><treerow><treecell label="stoerung_1"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_2"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_3"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_4"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_5"/></treerow></treeitem>
</treechildren>
</treeitem>

<treeitem container="true">
<treerow><treecell label="M1"/></treerow>
<treechildren>
<treeitem><treerow><treecell label="stoerung_6"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_7"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_8"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_9"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_10"/></treerow></treeitem>
</treechildren>
</treeitem>
</treechildren>
</tree>

Nun klicke ich auf "stoerung_6" und ich bekomme den labeltext "stoerung_6"
Jetzt möchte ich aber noch treeitem labeltext "M1" auslesen. Also wenn ich auf "stoerung_6..10" klicke möchte ich den labeltext "stoerung_6..10" sowie den labeltext vom Container (hier M1) auslesen.
Wie stelle ich dies an ****?

Gruß
worst_case
 
Hallo,

hier einmal der XML-Tree + Javascript Funktion.

<tree id="my-tree" flex="1" hidecolumnpicker="false" seltype="single" class="tree" rows="5" onselect="treeRowClicked()">
<treecols>
<treecol primary="true" flex="2" label="Anlage" persist="width" ordinal="1"/>
<splitter class="tree-splitter" ordinal="2"/>
</treecols>
<treechildren>
<treeitem container="true" open="true">
<treerow><treecell label="Z"/></treerow>
<treechildren>
<treeitem><treerow><treecell label="stoerung_1"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_2"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_3"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_4"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_5"/></treerow></treeitem>
</treechildren>
</treeitem>

<treeitem container="true">
<treerow><treecell label="M1"/></treerow>
<treechildren>
<treeitem><treerow><treecell label="stoerung_6"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_7"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_8"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_9"/></treerow></treeitem>
<treeitem><treerow><treecell label="stoerung_10"/></treerow></treeitem>
</treechildren>
</treeitem>
</treechildren>
</tree>


Diese Funktion steht in einer externen *.js Datei die im XML-Dokument geladen wird
function treeRowClicked()
{
var tree = document.getElementById ("my-tree");
var selection = tree.view.selection;
var anlage = tree.view.getCellText(tree.currentIndex, tree.columns.getColumnAt(0));

document.getElementById("akt_varname").value = "_" + anlage;
}


Nun klicke ich auf "stoerung_6" und ich bekomme den labeltext "stoerung_6"
Jetzt möchte ich aber noch treeitem labeltext "M1" auslesen. Also wenn ich auf "stoerung_6..10" klicke möchte ich den labeltext "stoerung_6..10" sowie den labeltext vom Container (hier M1) auslesen.
Beim klick "stoerung_1..5" natürlich labeltext "stoerung_1..5" sowie treeitem labeltext "Z" auslesen.

Gruß
worst_case
 
Zuletzt bearbeitet:
Hi, teste mal diese Funktion:
Javascript:
function treeRowClicked () {
    var tree = document.getElementById ("my-tree");
    var selectedCell = tree.getElementsByTagName('treecell')[tree.currentIndex];
    var container = selectedCell.parentNode.parentNode.parentNode.parentNode;
    if (container.nodeName != 'treeitem')
        return;

    var stoerung = selectedCell.getAttribute('label');
    var anlage = container.firstChild.firstChild.getAttribute('label');
    alert(anlage + ': ' + stoerung);
}
Nicht ganz so prickelnd wegen den vielen .parentNode, hilft aber warscheinlich auf die Sprünge.

Schau mal z.b. die "Element properties" ganz unten auf dieser Seite an (.childNodes, .nextSibling, ...). Dort findest du andere interessante Dinge, mit denen Du ans Ziel kommst.

Das MDN ist übrigens sehr zu empfehlen.
 
Hallo Bullja,

funktioniert Prima und danke für die zusätzlichen Adressen.
Ich hatte es schon fast aufgegeben.

Danke
worst_case
 
Zurück