jquery插件动态添加列表
Nestable jquery plugin add list dynamically
当我们尝试像这里描述的那样添加单个列表项时,Nestable工作得很好(Nestable jQuery插件:动态添加项)
但是如果我们尝试添加一个全新的list(ol元素),它就不能很好地工作了。
当我们尝试动态添加新的ol元素时,它不显示expand选项。
任何帮助都是感激的。
jsfiddle描述问题:http://jsfiddle.net/0zrsnt44/
// activate Nestable for list 1
$('#nestable').nestable()
$(function () {
var nestablecount = 4;
$('#appendnestable').click(function () {
$('ol.outer').append('<li class="dd-item dd3-item" data-id="' + nestablecount + '"><div class="dd-handle dd3-handle">Drag</div><div class="dd3-content" name="' + nestablecount + '">Item ' + nestablecount + '</div></li>');
nestablecount++;
});
});
要创建一个Nestable子列表,您必须遵循以下模式:
<ol class="dd-list outer">
...
<li class="dd-item addnewlist" data-id="4">
<div class="dd-handle">Item 4</div>
<!-- Dynamically added >>>>>> -->
<ol class="dd-list outer">
<li class="dd-item" data-id="3">
<div class="dd-handle">Item 3</div>
</li>
</ol>
<!-- <<<<<< -->
</li>
...
</ol>
。子列表应该放在div.dd-handle
之后,并且它本身必须包含li.dd-item
和div.dd-handle
元素。
但是即使你做对了,还有一个更大的问题:Nestable不会知道底层DOM中有新元素,所以它不会正确地初始化它们,创建展开/折叠按钮等。此外,它没有办法让用户显式地重新初始化/重绘它。
你可以选择fork插件并添加所需的功能,或者尝试从你的代码中破解和扩展它。
这是我的尝试,它创建了一个reinit
方法,可以在修改列表的DOM后调用它来更新它:
(function($) {
var $plugin = $('<div>').nestable().data('nestable');
var extensionMethods = {
reinit: function() {
// alias
var list = this;
// remove expand/collapse controls
$.each(this.el.find(this.options.itemNodeName), function(k, el) {
// if has <ol> child - remove previously prepended buttons
if ($(el).children(list.options.listNodeName).length) {
$(el).children('button').remove();
}
});
// remove delegated event handlers
list.el.off('click', 'button');
var hasTouch = 'ontouchstart' in document;
if (hasTouch) {
list.el.off('touchstart');
list.w.off('touchmove');
list.w.off('touchend');
list.w.off('touchcancel');
}
list.el.off('mousedown');
list.w.off('mousemove');
list.w.off('mouseup');
// call init again
list.init();
} // reinit
};
$.extend(true, $plugin.__proto__, extensionMethods);
})(jQuery);
这个方法可以这样调用:
$('#nestable').nestable('reinit');
完整示例:JSFiddle
我的方法很容易与Dekkard的方法相似。你会看到我大约11个月前在CodePen上做过这个,当时nestable.js的未来似乎比现在更光明,因为它在开发支持方面。我认为这是值得的,这样你就可以看到这个插件还可以做什么。
查看我的CodePen: http://codepen.io/mijopabe/pen/xlcjq.
您可以创建并使用计数器来跟踪您创建并正在操作的特定列表项:
$(function(){
var nestablecount = 4;
$('#appendnestable').click(function(){
$('ol.outer').append('<li class="dd-item dd3-item" data-id="'+nestablecount+'">
<div class="dd-handle dd3-handle">Drag</div><div class="dd3-content" name="'
+nestablecount+'">Item '+nestablecount+'</div><div id="c-'+nestablecount+'"
class="content"><form role="form-'+nestablecount+'"><div class="form-group"><label
for="name">Name</label><input type="text" class="form-control" id="name"
placeholder="Phyllis Wheatley"></div><div class="form-group"><label for="name">Add a
Description</label><textarea class="form-control" rows="3" placeholder="Quite the poet">
</textarea><div class="checkbox"><label><input type="checkbox" value="">Now you know it ;)
</label><button type="submit" class="btn btn-default btn-xs pull-right">Yes</button></div>
</div></form></div></li>');
updateOutput($('#nestable').data('output', $('#nestable-output')));
nestablecount++;
});
});
Hello All,
My approach is very simple and is readily readable.
Add 2 jquery files in your project :- 1) nestable.js 2) nestable.css
**HTML**
<label>Enter Your Data</label>
<input type='text' id='tncInput'>
<button id="appendnestable">Add Data to li</button>
<div class="dd" id="nestable">
<ol class="dd-list outer"></ol>
</div>
**jQuery**
$('#nestable').nestable();
$(function() {
var nestablecount = 1;
$('#appendnestable').click(function() {
var tnc = $('#tncInput').val();
var html = '<li class="dd-item" id="' + nestablecount + '" data-id="' + nestablecount + '"><div class="dd-handle"> ' + tnc + '</div></li>'
$('ol.outer').append(html);
$('#tncInput').val('')
nestablecount++;
});
});
This is how you will be able to enter your data dynamically to LI.
Moreover, you can even change some nestable configuration settings as follows :
$('#nestable').nestable({maxDepth:2, group:1});
maxDepth :- number of levels an item can be nested (default 5)
group:- group ID to allow dragging between lists (default 0)
Thanks!!
相关文章:
- 在Javascript中使用JQueryMobile向列表添加项目
- 角度 - 需要向选择下拉列表添加多个占位符
- Javascript:如何为列表添加价值并使其即时更新
- 如何为我的嵌入YouTube播放列表添加Facebook共享按钮
- 如何允许用户将播放列表添加到单个 YT 帐户
- 将值列表添加到值本身,不包括其自身的值
- 将多个英国邮政编码列表添加到谷歌地图
- 如何使用 JavaScript 将下拉列表添加到<跨度>
- 下划线模板,将列表添加到单个数组中
- 如何将地址列表添加到地图一侧
- 可以通过Javascript将选择下拉列表添加到我的winJS工具栏中吗?
- 如何将选择列表添加到自定义实体的案例表单中(注意:替换普通查找字段)
- 使用下拉列表添加/删除搜索框
- 如何使用zip.js将图像文件列表添加到zip文件中
- 如何在jQuery中向不同的下拉列表添加不同的前缀
- 如何在单击时以编程方式将网页列表添加到浏览器收藏夹中
- 单击按钮将下拉列表添加到新行
- 为每个从特定数字开始的x列表添加边框
- 在使用javascript向下拉列表添加项目并运行服务器端代码后,无效的回发或回调参数
- 选择Jplayer播放列表添加复选框