1

I am loading some HTML elements via jQuery:

Considder this case:

<li>test</li> (1)
<li>test</li> (2)
<li>test</li> (3)

If i do:

    $("body").find('li:last')

I will get the last li element, the one i marked (3) and if i was always sequentially adding items that would be fine. However if i add a new element in between:

<li>test</li> (1)
<li>test</li> (2)
<li>test</li> (4)<-
<li>test</li> (3)

:last wont do, because the element i added is not the last in the list.

How do i get a reference to (4)?

edit: and please, no eq() solutions, i need this to be dynamic and i can't always know where the element is added in the context.

4

5 に答える 5

6

最後に追加された要素が何であったかを知る組み込みの方法はありません。自分で追跡する必要があります。

それを行うには、少なくともいくつかの方法があります。

  1. コード内でそれへの参照を保持できます。

  2. data-*属性またはクラスを使用して、後でそれを探すことができます。次に例を示します。

    // Get the last
    var last = $("[data-last]");
    
    // When adding
    $("[data-last]").removeAttr("data-last"); // clear from previous
    $(....).append(...).attr("data-last", 1); // set on the new one
    

    また

    // Get the last
    var last = $(".last");
    
    // When adding
    $(".last").removeClass("last");       // clear from previous
    $(....).append(...).addClass("last"); // set on the new one
    
  3. (追加) : 「最後の」要素は1 つしかないのでを使用したアーメンのアプローチidは理にかなっと思いますカウンターはまったく必要ありません。使用するだけlastです:

    // Get the last
    var list = $("#last");
    
    // When adding a new one
    $("#last").attr("id", "");
    $(...).append(...)[0].id = "last"; // Or .attr("id", "last");
    

私は#1 #3 を好む傾向にありますが、#1 と #2 にはいくつかの実際の使用例があります。

于 2012-11-14T13:37:07.517 に答える
5

最後の要素を追加すると、次のようにクラスを追加できます。

.addClass("lastAdd");

そして、あなたは参照を取得します$(".lastAdd")

于 2012-11-14T13:37:19.800 に答える
2

「li」要素に何らかの属性 (id など) を追加し、この属性値で検索するだけです。

于 2012-11-14T13:37:38.640 に答える
1

新しい変数を初期化する

var counter = 1;

要素インクリメントカウンターを追加した後

$('<li id=newli' + counter +'>test</li>').appendTo('body');
counter++;

そのアイテムを取得できる場合は、次のように呼び出します。

var Id = $('#newli' + counter);
$(Id).
于 2012-11-14T13:44:05.190 に答える
0

挿入した要素を順番に呼び出すためにjQueryが本当に必要な場合は、独自の関数を追加する必要があります(変更することもできますが、お勧めしません...):

var inserted = [];
$.fn.insertBeforeAndRecall = function(){
    inserted.push(this);
    this.insertBefore(arguments);   
}
function getLastInserted() {
    return inserted[inserted.length-1];
}

insertBeforeAndRecallの代わりに呼び出して使用しますinsertBefore

デモンストレーション

于 2012-11-14T13:48:45.070 に答える