使用 jQuery 将嵌套无序列表转换为面包屑
我有一个由 ajax 填充的嵌套无序列表,我希望从中创建面包屑式导航。最终结果应该是我单击列表中的任何节点,并且父列表项显示在面包屑导航中。
<div id="list">
<ul>
<li class="expanded">
<a href="#" id="1122">Root Group</a>
</li>
<ul>
<li class="expanded">
<a href="#" id="1126">Northeast US</a>
</li>
<ul>
<li class="collapsed">
<a href="#" id="1127">Massachusetts</a>
</li>
<ul style="display: none; ">
<li class="expanded node">
<a href="#" id="1128">Mansfield-Foxboro</a>
</li>
<li class="expanded node">
<a href="#" id="1129">North Attleboro</a>
</li>
</ul>
<li class="expanded">
<a href="#" id="1144">New Hampshire</a>
</li>
<ul>
<li class="expanded node">
<a href="#" id="1145">Manchester</a>
</li>
</ul>
</ul>
<li class="expanded">
<a href="#" id="1181">Mid-Atlantic US</a>
</li>
<ul>
<li class="expanded">
<a href="#" id="1182">New York City</a>
</li>
<ul>
<li class="expanded node">
<a href="#" id="1183">Time Square</a>
</li>
</ul>
</ul>
</ul>
</ul>
</div>
所以我点击纽约市,我得到: 根组>美国大西洋中部>纽约市
我点击 North Attleboro,我得到: 根组>美国东北部>马萨诸塞州> North Attleboro
有没有办法使用 jQuery 遍历来构建这条路径?
I have a nested unordered list populated by ajax and I am looking to create breadcrumb-style navigation out of it. The end result should be I click on any node in the list and the parent list items show up in the breadcrumb navigation.
<div id="list">
<ul>
<li class="expanded">
<a href="#" id="1122">Root Group</a>
</li>
<ul>
<li class="expanded">
<a href="#" id="1126">Northeast US</a>
</li>
<ul>
<li class="collapsed">
<a href="#" id="1127">Massachusetts</a>
</li>
<ul style="display: none; ">
<li class="expanded node">
<a href="#" id="1128">Mansfield-Foxboro</a>
</li>
<li class="expanded node">
<a href="#" id="1129">North Attleboro</a>
</li>
</ul>
<li class="expanded">
<a href="#" id="1144">New Hampshire</a>
</li>
<ul>
<li class="expanded node">
<a href="#" id="1145">Manchester</a>
</li>
</ul>
</ul>
<li class="expanded">
<a href="#" id="1181">Mid-Atlantic US</a>
</li>
<ul>
<li class="expanded">
<a href="#" id="1182">New York City</a>
</li>
<ul>
<li class="expanded node">
<a href="#" id="1183">Time Square</a>
</li>
</ul>
</ul>
</ul>
</ul>
</div>
So I click on New York City and I get:
Root Group > Mid-Atlantic US > New York City
I click on North Attleboro and I get:
Root Group > Northeast US > Massachusetts > North Attleboro
Is there a way to build this path using jQuery traversal?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以从单击的
元素开始,使用 parents() 匹配其祖先链中的
元素,然后应用 prev() 到结果中获得紧邻
元素之前。
从那里,您可以使用 find() 来匹配
列表项中的元素。如果您add()将单击的超链接本身添加到结果集中,您将拥有一个包含所有内容的 jQuery 对象路径中的超链接,按正确的顺序。
现在您只需使用 map() 从
构建内部文本值数组
元素,以及 Array.join() 连接路径 细绳。最终结果是这样的:您可以在 this fiddle 中测试它。
You can start from the clicked
<a>
element, use parents() to match the<ul>
elements in its ancestor chain, then apply prev() to the result to obtain the immediately preceding<li>
elements.From there, you can use find() to match the
<a>
elements within the list items. If you add() the clicked hyperlink itself to the result set, you will have a jQuery object containing all the hyperlinks in the path, in the proper order.Now you only have to use map() to build an array of inner text values from the
<a>
elements, along with Array.join() to concatenate a path string. The end result is something like:You can test it in this fiddle.
您可以使用以下代码获取单击的
的所有
这会找到所有上升元素
被单击的
的 code> 标签,迭代它们,从非
.node
中选择文本这是一个 jsfiddle,它输出一个可用于面包屑的数组: http://jsfiddle.net/rE9x8/1 /
You can get all the
<li>
ascendants of the clicked<li>
with the following code:This finds all the ascendant
<ul>
tags of the<li>
that was clicked, the iterates through them, selecting the text from non.node
<li>
's.Here is a jsfiddle that outputs an array you can use for your breadcrums: http://jsfiddle.net/rE9x8/1/
我只是粗略地浏览了结构:
I just crudely navigated the structure: