我一直在使用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错误或警告。
因此,我的问题有两个方面:
基于W3C标准是上面格式正确的HTML语法?我想是的。
为什么Fancytree不呈现第二个文件夹?这是Fancytree的错误吗?我可以轻松地进行自定义以进行渲染吗?
我的HTML源代码是动态的,涉及相当复杂的XSLT,所以我希望答案不是要重构HTML结构。
我非常感谢可以提供的任何见解。
答案 0 :(得分:0)
在继续推进这项工作之后,我能够回答我自己的问题。
<UL>
元素一行中多个&lt; UL>
元素的HTML语法确实完全有效。但是,当数据以这种格式构造时,第二个无序列表确实成为它自己的实体。结构的整个要点是构建可以完全表示为单个树结构的东西,因此包含单个根元素<UL>
和子节点。当然,子节点可能有其他子节点,它们成为嵌套无序列表<UL>
,列表项<LI>
。
以下是一个例子:
FancyTree根据上述答案按照这种方式进行设计。
在调整XSLT以调用<UL>
个容器中的各个模板时,每个XSL模板都会根据需要正确添加它自己的列表项。最终结果是代表HTML数据结构的树视图。
还有一点是,XSLT必须在渲染节点之前执行逻辑检查。原因是如果模板没有要添加到结构的任何列表项,则创建空<UL>
会使树视图渲染绊倒。在这种情况下,它导致树节点成为错误父元素的子节点。