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

发布于 2024-12-07 17:55:38 字数 572 浏览 1 评论 0原文

将新的 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 则不起作用 有什么想法吗!?

What is the best way to insert a new li element into a specific position of a nested set model?

For example, the following list:

<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>

Let's say I want to insert a new li as a child of #list_2
I can do like that:

$('#list_'+parent_ID+' ol > li:last-child').after('<li id=""></li>');

But wouldn't work if parent was going to be #list_1 or #list_4
Any ideas !?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

白日梦 2024-12-14 17:55:38

这是一个示例,在单击时添加适当的元素:

$('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>");
});

Here's an example, adding the appropriate elements on click:

$('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>");
});
橙幽之幻 2024-12-14 17:55:38

如果我理解正确的话,这个 jsfiddle 上的示例可能就是您正在寻找的?!如果父元素内已存在

    ,则会附加

  1. 。如果父级
  2. 为空,则在将新子级附加到其之前会创建新的
function appendItemToList(parentId) {
    var $thelist = $("#list_"+parentId),
        $ol = $thelist.find("> ol");

    if(!$ol.length) {
        $ol = $("<ol />").appendTo($thelist);
    }
    $ol.append("<li id=''></li>");
}

If I understood correctly, this example on jsfiddle might be what you are looking for?! If there already is an <ol> inside the parent element, the <li> is appended. If the parent <li> is empty, a new <ol> is created before the new child is appended to it.

function appendItemToList(parentId) {
    var $thelist = $("#list_"+parentId),
        $ol = $thelist.find("> ol");

    if(!$ol.length) {
        $ol = $("<ol />").appendTo($thelist);
    }
    $ol.append("<li id=''></li>");
}
唯憾梦倾城 2024-12-14 17:55:38

使用 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/

Using iff plugin -

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

Demo - http://jsfiddle.net/MUcbW/2/

香草可樂 2024-12-14 17:55:38

有很多方法。其中之一可能是这样的:

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>');
}

您可以在此处进行测试

There are many ways. One may be this:

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>');
}

You can test here.

寄意 2024-12-14 17:55:38

您可以在一行中执行此操作,例如:

$('#list_' + parentId).contents().andSelf().filter('li').last().after('<li id=""></li>');

jsFiddle - http://jsfiddle.net/FloydPink/TSBKY/

You could do this in one line like:

$('#list_' + parentId).contents().andSelf().filter('li').last().after('<li id=""></li>');

jsFiddle - http://jsfiddle.net/FloydPink/TSBKY/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文