Javascript 在ajax调用中替换jstree节点
我有一个用于存储数据的jstree对象,我使用ajax一步一步地完成它。我调用一个ajax.php文件,该文件将返回HTML格式的节点,具体取决于发送给它的数据 我的问题如下:我知道我将接收的数据已经包含当前节点的结构,而不是用从ajax调用接收的数据替换当前节点,jstree将结构作为一个新的子添加到当前节点,这不是我想要的 例如,如果单击节点1:Javascript 在ajax调用中替换jstree节点,javascript,jquery,replace,jstree,Javascript,Jquery,Replace,Jstree,我有一个用于存储数据的jstree对象,我使用ajax一步一步地完成它。我调用一个ajax.php文件,该文件将返回HTML格式的节点,具体取决于发送给它的数据 我的问题如下:我知道我将接收的数据已经包含当前节点的结构,而不是用从ajax调用接收的数据替换当前节点,jstree将结构作为一个新的子添加到当前节点,这不是我想要的 例如,如果单击节点1: 0 | - 1 | - 2 我将得到以下结构: 0 | - 1 | | - 1 | | | - 1.1 | | | - 1.2 | - 2 我
0
| - 1
| - 2
我将得到以下结构:
0
| - 1
| | - 1
| | | - 1.1
| | | - 1.2
| - 2
我无法更改ajax调用返回,但我认为以下代码可能会出现一些小故障,以使用返回的数据替换节点,而不是将其作为当前节点的子节点插入:
$node.jstree({
"plugins" : [ "themes", "html_data" ],
"html_data" : {
ajax: {
url: "ajax.php",
data: function(node){
return {
index: (node != -1) ? node.attr("id") : 0
};
},
type: "POST"
}
},
animated: 'fast'
});
非常感谢您的回答:)好吧,在与jstree插件打过架并被我的一位朋友建议改变视角后,我最终决定从头开始制作自己的折叠/展开树算法,这对于jQuery和CSS来说并不难,即使对于像我这样的JavaScript新手也是如此! 我花了一天时间,但我学得很好 jQuery:
$('.closed').on('click', changeContent);
function changeContent(e) {
$('.open').unbind();
$('.closed2').unbind();
$('.closed').unbind();
var $this = $(this);
$this.attr('class', 'open');
$.ajax({
type: 'post',
url: 'ajax.php',
data: {
index: $this.attr("id")
},
success: function(xhr,msg) {
$this.replaceWith(xhr);
$('.closed').on('click', changeContent);
UpdateOpen();
}
});
}
function UpdateOpen(e) {
$('.open').unbind();
$('.closed2').unbind();
$('.open, .closed2').on('click', function(e) {
e.stopPropagation();
$('.open').unbind();
$('.closed2').unbind();
var $this = $(e.currentTarget);
if($this.attr('class') == 'closed2') {
$this.attr('class', 'open');
$this.children('ul').show();
UpdateOpen(e);
} else if($this.attr('class') == 'open') {
$this.attr('class', 'closed2');
$this.children('ul').hide();
UpdateOpen(e);
}
});
}
CSS:
我知道这不是最好的实现,但这就是我对JavaScript的了解。请注意,此代码取决于ajax.php返回数据的方式
.closed {padding-left: 7px; list-style-type: none; background: URL("/img/plus.gif") left top no-repeat; }
.closed2 {padding-left: 7px; list-style-type: none; border-left: 1px dotted; background: URL("/img/plus.gif") left top no-repeat; }
.open {padding-left: 7px; list-style-type: none; border-left: 1px dotted; background: URL("/img/minus.gif") left top no-repeat; }