【发布时间】:2017-05-31 19:59:30
【问题描述】:
我正在使用可嵌套排序的 jQuery (http://mjsarfatti.com/sandbox/nestedSortable/)。在列表中,用户可以拖放项目直到第 3 级。基本上,项目可以有父亲和祖父。
如果项目没有子项,它将附加跨度元素,包括输入文件。而如果项目是父亲或祖父,则不能显示输入文件元素。因此,当我将一个项目拖放到另一个项目(父亲)中时,这是可行的。但是当我在之前放置的项目中拖放一个项目时,输入文件不会消失。
我发布了 5 张图片以便更好地理解。
代码:
<ol class="sortable">
<li id="list_1"><div><span class="disclose"><span></span></span>Item 1<span title="Click to delete item." data-id="1" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<ol>
<li id="list_2"><div><span class="disclose"><span></span></span>Sub Item 1.1<span title="Click to delete item." data-id="2" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<ol>
<li id="list_3"><div><span class="disclose"><span></span></span>Sub Item 1.2<span title="Click to delete item." data-id="3" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
</ol>
</ol>
<li id="list_4"><div><span class="disclose"><span></span></span>Item 2<span title="Click to delete item." data-id="4" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<li id="list_5"><div><span class="disclose"><span></span></span>Item 3<span title="Click to delete item." data-id="5" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<ol>
<li id="list_6" class="mjs-nestedSortable-no-nesting"><div><span class="disclose"><span></span></span>Sub Item 3.1 (no nesting)<span title="Click to delete item." data-id="6" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<li id="list_7"><div><span class="disclose"><span></span></span>Sub Item 3.2<span title="Click to delete item." data-id="7" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<ol>
<li id="list_8"><div><span class="disclose"><span></span></span>Sub Item 3.2.1<span title="Click to delete item." data-id="8" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
</ol>
</ol>
<li id="list_9"><div><span class="disclose"><span></span></span>Item 4<span title="Click to delete item." data-id="9" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
<li id="list_10"><div><span class="disclose"><span></span></span>Item 5<span title="Click to delete item." data-id="10" class="deleteMenu ui-icon ui-icon-closethick">X</span></div>
</ol>
Javascript:
$('ol.sortable').nestedSortable({
forcePlaceholderSize: true,
handle: 'div',
helper: 'clone',
items: 'li',
opacity: .6,
placeholder: 'placeholder',
revert: 250,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div',
maxLevels: 3,
isTree: true,
expandOnHover: 700,
startCollapsed: true,
stop: function(event, ui) {
//get item id
var id = $(ui.item).attr('id');
var res = id.substr(5);
//check the item have child
if($('#list_'+res).find('ol').length != 0) {
//The item have child!
$(this).parent('span.file_upload').remove();
} else {
//The item don't have child!
//check the item have father
if ($('#list_'+res).parent().is('ol.sortable')) {
//The item don't have father
$('#list_'+res).find('span.file_upload').remove();
} else {
//The item have father!
//avoid multiple button file (only one!)
if ($('#list_'+res).find('span.file_upload').length == 0) {
//insert the file button
$('#list_'+res).append(
'<span class="file_upload" title="Click to upload a file." id="res" class="deleteMenu">'
+ '<input name="upload_file" type="file" class="new_file" />'
+ '</span>');
}
}
}
}
});
【问题讨论】:
-
某些
<li>元素的结束标签在这种情况下不是可选的:stackoverflow.com/a/20550925/66580 例如。list_1,list_2. -
@MajidFouladpour,我放了结束标签,但没有解决。谢谢
-
是否尝试过设置断点并在代码执行时单步执行?我还会在
$(this).parent('span.file_upload').remove();上方添加一个console.log(this);,以确保this是您所假设的。 -
@MajidFouladpour,在控制台日志中,如果项目有子项,则会打印:
- 。如果该项目没有孩子,请不要打印。有什么建议吗?
-
@MajidFouladpour,我把 $('#list_'+res).parent().find('span.file_upload').remove();但问题正在发生。
标签: javascript jquery tree