【问题标题】:How to add a list item to an existing unordered list如何将列表项添加到现有的无序列表
【发布时间】:2010-11-11 19:49:29
【问题描述】:

我的代码如下所示:

<div id="header">
    <ul class="tabs">
        <li><a href="/user/view"><span class="tab">Profile</span></a></li>
        <li><a href="/user/edit"><span class="tab">Edit</span></a></li>
    </ul>
</div>

我想使用 jQuery 将以下内容添加到列表中:

<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>

我试过了:

$("#content ul li:last").append("<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>");

但这会将新的li inside 添加到最后一个li(就在结束标记之前),而不是在它之后。添加此li 的最佳方式是什么?

【问题讨论】:

标签: jquery jquery-append


【解决方案1】:

这样就可以了:

$("#header ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');

两件事:

  • 您可以将&lt;li&gt; 附加到&lt;ul&gt; 本身。
  • 您需要使用与您在 HTML 中使用的相反类型的引号。因此,由于您在属性中使用双引号,因此请用单引号将代码括起来。

【讨论】:

  • 作为旁注,您可以使用 prepend 而不是 append,以防您想添加为第一个元素而不是最后一个元素
【解决方案2】:

您还可以以更“对象”且仍然易于阅读的方式进行操作:

$('#content ul').append(
    $('<li>').append(
        $('<a>').attr('href','/user/messages').append(
            $('<span>').attr('class', 'tab').append("Message center")
)));

那时你不必和引号打架,但你必须保留大括号的痕迹:)

【讨论】:

  • 您的方法不会启动新标签但不会关闭它们吗?
  • 不,jquery使用DOM操作创建标签,所以它只需要知道它的名字
  • 我喜欢这个。我讨厌弄乱字符串和引号:) BTW:其他选项是stackoverflow.com/a/4673436/112000
  • 这是迄今为止更可取的方式,即使用更面向对象的方式。
【解决方案3】:

如果您只是在 li 中添加文本,您可以使用:

 $("#ul").append($("<li>").text("Some Text."));

【讨论】:

  • 在尝试了所有失败的解决方案后对我来说就像一个魅力..
【解决方案4】:

用“after”代替“append”怎么样?

$("#content ul li:last").after('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');

".after()" 可以在匹配元素集合中的每个元素之后插入由参数指定的内容。

【讨论】:

  • 谢谢,这对我有帮助。要插入到列表的中间,您需要使用beforeafter
  • 这与@Danubian_Sailor 的回答相结合,对我来说很合适
【解决方案5】:

jQuery 附带以下选项,可以满足您在这种情况下的需求:

append用于在选择器中指定的父div的末尾添加一个元素:

$('ul.tabs').append('<li>An element</li>');

prepend 用于在选择器中指定的父 div 的顶部/开头添加一个元素:

$('ul.tabs').prepend('<li>An element</li>');

insertAfter 允许您在指定的元素之后插入您选择的元素。然后,您创建的元素将被放入 DOM 中指定的选择器结束标记之后:

$('<li>An element</li>').insertAfter('ul.tabs>li:last');
will result in:
<li><a href="/user/edit"><span class="tab">Edit</span></a></li>
<li>An element</li>

insertBefore 将与上述相反:

$('<li>An element</li>').insertBefore('ul.tabs>li:last');
will result in:
<li>An element</li>
<li><a href="/user/edit"><span class="tab">Edit</span></a></li>

【讨论】:

    【解决方案6】:

    你应该追加到容器,而不是最后一个元素:

    $("#content ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
    

    append() 函数应该在 jQuery 中被称为 add(),因为它有时会让人感到困惑。你会认为它在给定元素之后附加了一些东西,而实际上它添加它到元素中。

    【讨论】:

      【解决方案7】:
      $("#content ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
      

      【讨论】:

      • 解释一下。例如,user "Dipak" wrote“不应该是 '#header' 而不是 '#content'?”
      【解决方案8】:

      代替

      $("#header ul li:last")
      

      试试

      $("#header ul")
      

      【讨论】:

        【解决方案9】:

        用途:

        $("#content ul").append('<li><a href="/user/messages"><span class="tab">Message Center</span></a></li>');
        

        这里有一些关于代码可读性(博客的无耻插件)的反馈。 http://coderob.wordpress.com/2012/02/02/code-readability

        考虑将新元素的声明与将它们添加到 UL 的操作分开。它看起来像这样:

        var tabSpan = $('<span/>', {
            html: 'Message Center'
        });
        var messageCenterAnchor = $('<a/>', {
            href='/user/messages',
            html: tabSpan
        });
        var newListItem = $('<li/>', {
            html: messageCenterAnchor,
            "id": "myIDGoesHere"
        });    // NOTE: you have to put quotes around "id" for IE..
        
        $("content ul").append(newListItem);
        

        【讨论】:

        • var newListItem = $('
        • ', { html: messageCenterAnchor });如何获取 li 和 id?
      • @jmogera,你想设置 id 吗?如果是这样,您可以在 {} 中执行此操作。我更新了上面的代码:)
      • 链接已损坏(实际上已损坏):“糟糕!找不到该页面。”
      • 【解决方案10】:

        用途:

        // Creating and adding an element to the page at the same time.
        $("ul").append("<li>list item</li>");
        

        【讨论】:

          【解决方案11】:

          这是你能做到的最短的方法:

          list.push($('<li>', {text: blocks[i] }));
          $('ul').append(list);
          

          blocks 是一个数组。而且你需要遍历数组。

          【讨论】:

            【解决方案12】:

            这是另一个

            $("#header ul li").last().html('<li> Menu 5 </li>');
            

            【讨论】:

              【解决方案13】:

              只是为了添加到这个线程 - 如果您要 移动 现有项目,您将需要使用 clone,然后在是否克隆/深度克隆事件时使用 true/false( https://api.jquery.com/clone/)。

              示例: $("#content ul").append($('.existing_li').clone(true));

              【讨论】:

                【解决方案14】:

                使用jqueryprepend()函数在ul中添加li作为第一项

                $("ul").prepend("<li>first item</li>");
                

                使用jqueryappend()函数在ul中添加li作为最后一项

                $("ul").append("<li>last item</li>");
                

                【讨论】:

                  猜你喜欢
                  相关资源
                  最近更新 更多
                  热门标签