将新li元素插入嵌套集模型的特定位置的最佳方法是什么?
例如,以下列表:
<ol class="nested">
<li id="list_1"></li>
<li id="list_2">
<ol>
<li id="list_3"></li>
<li id="list_4"></li>
</ol>
</li>
<li id="list_5"></li>
</ol>
假设我想插入一个新的li作为#list_2的孩子 我可以这样做:
$('#list_'+parent_ID+' ol > li:last-child').after('<li id=""></li>');
但如果父母要成为#list_1或#list_4,那就行不通了 任何想法!?
答案 0 :(得分:1)
如果我理解正确,这example on jsfiddle可能就是您要找的东西?!如果父元素中已存在<ol>
,则会附加<li>
。如果父<li>
为空,则会在将新子项附加到其之前创建新的<ol>
。
function appendItemToList(parentId) {
var $thelist = $("#list_"+parentId),
$ol = $thelist.find("> ol");
if(!$ol.length) {
$ol = $("<ol />").appendTo($thelist);
}
$ol.append("<li id=''></li>");
}
答案 1 :(得分:1)
使用iff插件 -
var parent_ID = 1;
$('#list_' + parent_ID).
iff($(this).children('ol').length > 0)
.append("<li>new</li>").end()
.iff($(this).children('ol').length == 0)
.append("<ol><li>new</li></ol>");
答案 2 :(得分:1)
这是一个例子,在点击时添加适当的元素:
$('ol.nested > li').bind('click', function(){
var elem;
if ($('ol', this).length > 0) {
elem = $(this).find('ol');
} else {
elem = $('<ol>').appendTo($(this));
}
elem.append("<li>new</li>");
});
答案 3 :(得分:0)
有很多方法。一个可能是这个:
if ($('#list_'+parent_ID+' ol').length > 0) {
$('#list_'+parent_ID+' ol > li:last-child').after('<li id=""></li>');
} else {
$('#list_'+parent_ID).append('<ol><li id=""></li></ol>');
}
你可以test here。
答案 4 :(得分:0)
您可以在一行中执行此操作,如:
$('#list_' + parentId).contents().andSelf().filter('li').last().after('<li id=""></li>');
jsFiddle - http://jsfiddle.net/FloydPink/TSBKY/