2013-08-22 15 views
5

Ich benutze jstree und ich möchte einen bestimmten Knoten durch seine ID nach einem Klick auf eine Schaltfläche löschen.Knoten nach ID in jstree entfernen, wenn auf geklickt wird

Dies ist mein Baum in html Listenformat:

<div id="testtree"> 
    <ul> 
     <li id="1" title="ID:1"><a>Fruits and Vegetables</a> 
      <ul> 
     <li id="11" title="ID:11"><a>Fruit</a> 
       <ul> 
       <li id="111" title="ID:111"><a>Apple</a></li> 
       <li id="112" title="ID:112"><a>Banana</a></li> 
       </ul> 
      </li> 
      </ul> 
     </li> 
    </ul> 
</div> 

und dies ist meine Schaltfläche Ereignis (Ich habe mehrere Tasten bekommt, damit das Array):

buttons[0].addEventListener("click", function(ev) { 
     $("#testtree").jstree("remove", $("111")); 
    }); 

Alle Ideen, was ich fehlt?

Update:

Ich habe den Tippfehler korrigiert, aber es funktioniert immer noch nicht. Hier ist der vollständige Code, vielleicht ist der Fehler woanders?

<html> 
<head> 
    <title>jstree test</title> 
</head> 
<body> 
    <div id="testtree"> 
     <ul> 
      <li id="1" title="ID:1"><a>Fruits and Vegetables</a> 
       <ul> 
        <li id="11" title="ID:11"><a>Fruit</a> 
         <ul> 
          <li id="111" title="ID:111"><a>Apple</a></li> 
          <li id="112" title="ID:112"><a>Banana</a></li> 
          </ul> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </div> 

    <button>Remove Apple</button> 
    <script type="text/javascript" src="_lib/jquery.js"></script> 
    <script type="text/javascript" src="jquery.jstree.js"></script> 
    <script> 

     $(document).ready(function() { 

      $("#testtree").jstree({ 
       "plugins" : [ "themes", "html_data", "checkbox", "ui" ], 
       "core": { "initially_open": ["1"]} 
      }); 
     }); 

     var buttons = document.querySelectorAll("button"); 

     buttons[0].addEventListener("click", function(ev) { 
      $("#testtree").jstree("remove","#111"); 
     }); 

    </script> 
</body> 
</html> 
+0

In jQuery Sie schreiben können. '$ ("# Testtree # 111") entfernen();' –

+0

das funktioniert, aber ich brauche den Baum zu können, später neu geladen werden ohne fehlende Knoten. – atreju

Antwort

5

Nach jsTree documentation Sie

$("#testtree").jstree("remove","#111"); 

Ohne $()

wie diese entfernen
$("#testtree").jstree({ 
     "plugins": ["themes", "html_data", "checkbox", "ui", "crrm"], 
     "core": { 
      "initially_open": ["1"] 
     } 
    }); 

Sie müssen „CRRM“, um Plug-in für mich

+0

Ich habe das versucht, aber es funktioniert immer noch nicht. Ich habe meinen vollständigen Code im ersten Post aktualisiert, vielleicht ist der Fehler woanders? – atreju

+0

Ok, werde es auf meinem Computer testen – Anton

+1

@ user2241303 Gefunden es !! :) Ich werde meine Antwort aktualisieren – Anton

-1

ich es denke, ist ein Tippfehler: Versuch:

$("#testtree").jstree("remove", $("#111")); 
4

Jede der Antworten gearbeitet hinzuzufügen. Ich ziehe es vor, stattdessen zu verwenden:

$.jstree._reference("#tree-container or node or jquery selector").delete_node(node); 

Hoffe es hilft jemandem.

+1

plus eins ist dies derjenige, der es für mich getan hat danke. kein zusätzliches Plugin benötigt. – Gurnard

4

jsTree des manual (ver 3.0.0) sagt:

Bitte bedenken Sie, dass alle Änderungen an dem Baum durch Standard verhindert sind (erstellen, umbenennen, verschieben, löschen). Damit sie setzen core.check_callback auf true

Sie können auch Funktion verwenden, um die Art der Modifikation angeben zu können. Um zum Beispiel nur Knoten zu entfernen:

$('#tree').jstree({ 
    'core' : { 
     'check_callback' : function (operation, node, node_parent, node_position, more) { 
      // operation can be 'create_node', 'rename_node', 'delete_node', 'move_node' or 'copy_node' 
      // in case of 'rename_node' node_position is filled with the new node name 
      return operation === 'delete_node'; 
     } 
    } 
}); 
0

Das funktioniert für mich sehr gut.

Ich habe mehr als 70.000 Blattknoten & diese sofort entfernt.

this.getFilterTree().jstree("destroy"); 
this.getFilterTree().html(""); 


//return tree holder div 
getFilterTree: function() { 
return $('#jstreeHolder'); 
} 

Nach dem Entfernen können Sie Baum erneut instanziieren!

0

Das ist für mich gearbeitet, ohne eine externe Plugin.

$('#treeid').jstree().delete_node([node.id]); 
 
$('#treeid').jstree("refresh");

Verwandte Themen