jQuery-构建一个树样式列表
jQuery - Building a tree style list
我的DOM如下
<ul>
<li id="Browse">
Browse
<ul id="browse-one">
</ul>
</li>
</ul>
页面底部的jQuery是:
$("#Browse").click(function() {
$("#browse-one").html('<div class="ui-widget">Loading...</div>');
$("#browse-one").load('../api/browse.php?do=getFirst');
});
这个脚本进入数据库并吐出原始的LI。运行后,DOM被修改如下
<ul>
<li id="Browse">
Browse
<ul id="browse-one">
<li id="one-1" data-id="1">SOMETHING</li>
<li id="one-2" data-id="2">SOMETHING</li>
<li id="one-3" data-id="3">SOMETHING</li>
<li id="one-4" data-id="4">SOMETHING</li>
.
.
.
<li id="one-N" data-id="N">SOMETHING</li>
</ul>
</li>
</ul>
跟踪这些LI上的点击量的合适的jqueryish方式是什么。我想提取点击的元素的数据id,并进行第二个API调用来构造树的第二部分。例如,如果单击了数据id="1"的LI,则DOM应为:
<ul>
<li id="Browse">
Browse
<ul id="browse-one">
<li id="one-1" data-id="1">SOMETHING
<ul id="Something Here">
<li id="two-1" data-id="1">HMM</li>
<li id="two-2" data-id="2">HMM</li>
<li id="two-3" data-id="3">HMM</li>
.
.
.
<li id="two-M" data-id="M">HMM</li>
</ul>
</li>
<li id="one-2" data-id="2">SOMETHING</li>
<li id="one-3" data-id="3">SOMETHING</li>
<li id="one-4" data-id="4">SOMETHING</li>
.
.
.
<li id="one-N" data-id="N">SOMETHING</li>
</ul>
</li>
</ul>
我很难思考如何保持内部UL的每个ID的唯一性。当然,我可以像在"two-1"中那样做"LEVEL-ID",但我觉得这很粗糙,不是合适的jquery方式。
编辑:
但现在我该如何跟踪孩子们的点击??这似乎不正确,但我希望你能理解我为什么要做
$("#Browse").click(function() {
$("#locations-browse").html('<div class="ui-widget">Loading...</div>');
$("#locations-browse").load('../api/browse.php?do=getFirst');
//Child is tracked
$("#locations-browse").delegate("li","click",function(evt){
var inner = $(this).append("<ul></ul>");
inner.html('<div class="ui-widget">Loading...</div>');
inner.load('../api/browse.php?do=getSecond');
$(this).delegate("li","click", function(evt) {
alert("Child ". $(this).data("id") . " is clicked";
});
});
});
编辑2:
嗯,这仍然不起作用:
$("#Browse").click(function() {
$("#locations-browse").html('<div class="ui-widget">Loading...</div>');
$("#locations-browse").load('../api/browse.php?do=getFirst');
//Child is tracked
$("#locations-browse").delegate("li","click",function(evt){
$(this).append("<ul></ul>");
$(this).children("ul").load('../api/browse.php?do=getSecond?location-id='.$(this).data("id"));
$(this).delegate("li","click", function(evt) {
alert($(this).data("id"));
});
});
});
通过li#Browse
委派事件,并引用相对于事件上下文元素的data-id
属性。
$('#Browse').on('click', 'li', function(evt) {
alert($(this).data('id'));
});
顺便说一句,有几个开箱即用的插件可以满足您的需求,以防您不想构建自己的插件,例如YUI Treeview或我写的那个。
相关文章:
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 如果类不是一个选项,如何在使用 jQuery 时控制(避免)嵌套 html 元素的样式
- jQuery Mobile样式从另一个文件加载内容
- 你能在JS中获得一个样式而不将其附加到DOM元素吗
- Javascript选中一个表中的所有复选框,该表的行具有样式显示标记
- 单击上一个或继续按钮时更改选项卡样式
- 如何更改列表中一个元素中的文本样式
- 访问一个控制器的ng隐藏值以在全局控制器中操纵另一个控制器中的ng样式
- 是否可以在材质ui中只更改样式道具中的一个属性
- jQuery mobile:在页面导航期间,当建立服务器连接时,下一个页面的样式将应用于当前页面
- jQuery-构建一个树样式列表
- 代码重构一个长 JavaScript 字符串,使其更容易设置样式
- 选择一个 CSS 选择器来动态设置元素的样式 ::before
- struts2 文本区域 仅为一个单词添加样式
- 设置/复制javascript计算样式从一个元素到另一个元素
- 将Class添加到具有任意2个类的所有表行,并将另一个样式添加到具有任何3个类的全部表行
- 如何为一个样式表每次刷新随机图像,但在选择另一个样式表时消失
- 在移动设备中,哪一个更快:包括一个额外的CSS文件或在JavaScript中创建一个样式元素
- 如果文档的ID有一个样式=none则XXX否则XXXX