Fancytree jQuery插件不能连续处理多个<ul>元素</ul>

时间:2014-03-31 14:01:01

标签: jquery fancytree

我一直在使用Martin Wendt撰写的Fancytree jQuery plug-in,这太棒了。但是,我一直在努力解决某个方面问题。我使用HTML而不是JSON来表示树的数据结构,并发现它渲染了丢失的节点。

我花了相当多的时间将其缩小到Fancytree控件必须期待单个<UL>结构的事实。结构中的任何其他内容都必须嵌套在<LI>下。但是我不明白为什么。让我解释一下。

以下是一些示例HTML:

<div id="tree">
   <UL id="browser" class="filetree">
      <LI class="folder">
         Folder 1
         <UL>
            <LI>Nested Folder 1
               <UL>
                  <LI>Subitem1</LI>
                  <LI>Subitem2</LI>
               </UL>
            </LI>
         </UL>
         <UL>
            <LI>Nested Folder 2
               <UL>
                  <LI>Subitem1</LI>
                  <LI>Subitem2</LI>
               </UL>
            </LI>
        </UL>
      </LI>
   </UL>
</div>

当这个HTML在IE,Chrome或几乎任何浏览器中呈现时,它正确地显示为具有嵌套项的两个连续无序列表。但是,当我应用Fancytree节点&#34;嵌套文件夹2&#34;完全消失了。实际上,插件框架中没有JavaScript错误或警告。

因此,我的问题有两个方面:

  1. 基于W3C标准是上面格式正确的HTML语法?我想是的。

  2. 为什么Fancytree不呈现第二个文件夹?这是Fancytree的错误吗?我可以轻松地进行自定义以进行渲染吗?

  3. 我的HTML源代码是动态的,涉及相当复杂的XSLT,所以我希望答案不是要重构HTML结构。

    我非常感谢可以提供的任何见解。

1 个答案:

答案 0 :(得分:0)

在继续推进这项工作之后,我能够回答我自己的问题。

多个<UL>元素

一行中多个&lt; UL>元素的HTML语法确实完全有效。但是,当数据以这种格式构造时,第二个无序列表确实成为它自己的实体。结构的整个要点是构建可以完全表示为单个树结构的东西,因此包含单个根元素<UL>和子节点。当然,子节点可能有其他子节点,它们成为嵌套无序列表<UL>,列表项<LI>

以下是一个例子:

     
  • 测试
     
  • 另一项测试

FancyTree jQuery插件

FancyTree根据上述答案按照这种方式进行设计。

在调整XSLT以调用<UL>个容器中的各个模板时,每个XSL模板都会根据需要正确添加它自己的列表项。最终结果是代表HTML数据结构的树视图。

还有一点是,XSLT必须在渲染节点之前执行逻辑检查。原因是如果模板没有要添加到结构的任何列表项,则创建空<UL>会使树视图渲染绊倒。在这种情况下,它导致树节点成为错误父元素的子节点。