jquery将新li添加到嵌套集模型

时间:2011-10-03 21:32:12

标签: jquery nested-sets nested-set-model

将新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,那就行不通了 任何想法!?

5 个答案:

答案 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>");

演示 - http://jsfiddle.net/MUcbW/2/

答案 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/