既存の番号なしリストにリストアイテムを追加するにはどうすればよいですか?


548

次のようなコードがあります。

<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 の内側の最後liではなく、その後(終了タグの直前に)。これを追加する最良の方法は何liですか?

回答:


816

これはそれを行います:

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

2つのこと:

  • あなただけ追加することができます<li><ul>、それ自体。
  • HTMLで使用しているものとは逆のタイプの引用符を使用する必要があります。したがって、属性で二重引用符を使用しているため、コードを単一引用符で囲みます。

6
「#content」ではなく「#header」にすべきではありませんか?
Dipak 2012年

15
余談ですが、最後ではなく最初の要素として追加したい場合は、appendの代わりにprependを使用できます
Thomas

517

あなたはそれをより「オブジェクトの方法」で行うこともでき、それでも読みやすいです:

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

その場合、引用符で戦う必要はありませんが、中括弧のトレースを保持する必要があります:)


あなたのアプローチは新しいタグを開始しませんが、閉じませんか?
エバートン

1
いいえ、jqueryはDOM操作を使用してタグを作成するので、その名前を知って
いれ

これ大好き。文字列と引用符を
いじるの

2
これははるかに好ましい方法です。つまり、よりオブジェクト指向の方法を使用することです。
2013年

同時にマルチにかけるものはありますか?
tyan

51

「追加」の代わりに「後」を使用するのはどうですか。

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

「.after()」は、一致する要素のセットの各要素の後に、パラメーターで指定されたコンテンツを挿入できます。


3
ありがとう、これは私を助けてくれました。リストの中央に挿入するには、beforeまたはを使用する必要がありますafter
パトリックフィッシャー

1
これと
@Danubian_Sailor

50

にテキストを追加するだけの場合はli、次のように使用できます。

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

20

jQueryには、この場合のニーズを満たす次のオプションが付属しています。

appenddivセレクターで指定された親の末尾に要素を追加するために使用されます:

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

prependdivセレクタで指定された親の先頭/先頭に要素を追加するために使用されます:

$('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>

16

最後の要素ではなく、コンテナに追加する必要があります。

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

APPEND()関数は、おそらくと呼ばれてきたはずですアドオン() 、それは時々人々を混乱させるためのjQueryインチ 与えられた要素の後ろに何かを追加すると思いますが、実際にそれを要素に追加します。




6
$("#content ul").append('<li><a href="https://stackoverflow.com/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 = $( '<li />'、{html:messageCenterAnchor}); どうすればliとidを取得できますか?
jmogera 2012

@jmogera、あなたはIDを設定しようとしていますか?その場合は、{}内で行うことができます。私は上記のコードを更新しました:)
紛れもなくロブ

3

これはあなたがそれを行うことができる最短の方法です

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

配列内のブロック。配列をループする必要があります。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.