0

我以这种方式在项目中使用jqTree :

  1. 动态地将具有“.root”类的“p”元素添加到页面中。
  2. 单击按钮时,为每个“p.root”元素调用 jqTree。
  3. 添加每个 li 后,使用 onCreateLi 事件处理程序添加一个 id。
  4. 创建所有树后,添加一个类以突出显示多次出现的 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(),但它似乎中断了树的构建。

4

1 回答 1

0

也许您可以使用tree.init事件。在加载和渲染树后调用该事件。

于 2013-09-19T08:00:56.777 回答