我以这种方式在项目中使用jqTree :
- 动态地将具有“.root”类的“p”元素添加到页面中。
- 单击按钮时,为每个“p.root”元素调用 jqTree。
- 添加每个 li 后,使用 onCreateLi 事件处理程序添加一个 id。
- 创建所有树后,添加一个类以突出显示多次出现的 li。
最后一步是我遇到麻烦的地方。这是我正在使用的代码:
$('#compare-button').click(function(event){
event.preventDefault();
var last = false;
$('#output p.root').each(function(){
if ($(this).is(':last-child'))
{ last = true; } // set last = true on the last p.root
$(this).tree({
dataUrl: 'http://path/to/service/',
autoOpen: true,
dragAndDrop: false,
onCreateLi: function(node, $li){
$li.attr("value", node.id);
if (total_count.hasOwnProperty(node.id)) { total_count[node.id]++; }
else { total_count[node.id] = 1; }
if (last && $li.is(':last-child')) // Once we're done with our calls to .tree(), fire the highlighting code.
{
$.each(total_count, function(key, value){
if (value > 1) { $('li[value="' + key +'"] span').addClass('highlight'); }
});
}
} // end of onCreateLi
}) // end of tree()
}); // end of each()
}); // end of click()
问题是'onCreateLi' 在每个 li 之后触发,所以它刚刚创建的将永远是最后一个兄弟。我还在 .each() 的末尾尝试了一个 .load(),但它似乎中断了树的构建(我猜它在树构建之前就被解雇了)。
如果有 jqTree 的 .afterLoad() 事件处理程序,这会容易得多。
编辑:等等,这可能真的有效......
编辑 2:在 Firefox 中工作,而不是在 IE 中。
编辑 3:我将以不同的方式问这个问题,所以更多不熟悉 jqTree 的 jQuery 专家可以回答它。我正在使用 jQuery.each() 遍历每个“p.root”元素。完成该循环后,我需要触发一些代码。我尝试了 jQuery.each().after(),但它似乎中断了树的构建。