所以我有我的 JStree 内置<div id="navtree">
,当一个节点被选中时,我通过 .ajax() 方法将一些内容加载到<div id="tabs">
页面上的另一个地方:
$("#navtree")
.jstree({
"core" : { "animation" : 0 },
"themes" : { "theme" : "classic", "dots" : true, "icons" : false },
"ui" : { "select_limit" : 1 },
"plugins" : [ "themes", "html_data", "ui" ]
})
.bind("select_node.jstree", function (event, data) {
data.inst.toggle_node(data.rslt.obj);
$("#main").css("display","none");
var identifier = $.trim(data.rslt.obj.children("a").text());
$.ajax({
data : {target : identifier},
type : "POST",
url : data.rslt.obj.children("a").attr("href"),
success : function(response) {
$("#tabs").html(response);
$("#tabs").tabs();
$("#main").css("display","inline");
}
});
$("#searchinput").val("") .focus();
return false;
});
这一切都很好。
在这个新加载的内容中包含一些<a class="searchlink">
标签,当单击这些标签时,我想以编程方式在我的 jstree 中选择一个节点。
使用 .on() 方法,我可以在单击这些<a class="searchlink">
标签时触发警报:
$("body").on("click", "a.searchlink", function(event) {
event.preventDefault();
var $nodeid = "#" + $(this).text().replace(/\./g, "_");
alert($nodeid);
$("#navtree").jstree("select_node", $nodeid);
//$(nodeid).trigger("select_node.jstree");
});
因为 .on() 会传播到添加到页面的所有未来元素,所以 alert() 向我显示了我想要选择的节点的正确 ID。
但是,无论我如何尝试(并且我已经尝试了所有我能想到的),我都无法让它在现有 jstree 中的节点上触发“select_node”事件,我怀疑它有一些东西要这些<a class="searchlink">
标签是在 jstree 被实例化很久之后通过 .ajax() 调用添加到页面中的。
新信息:
每次单击<a class="searchlink">
通过 .ajax() 加载的内容时,Firefox Web 开发人员控制台都会向我显示错误“$("#navtree").jstree 不是函数”。