1

我正在通过 jQuery 加载一些 HTML 元素:

考虑这种情况:

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

如果我做:

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

我将得到最后一个 li 元素,即我标记为 (3) 的那个,如果我总是按顺序添加项目,那会很好。但是,如果我在两者之间添加一个新元素:

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

:last 不会,因为我添加的元素不是列表中的最后一个。

我如何获得对(4)的参考?

编辑:请不要 eq() 解决方案,我需要它是动态的,我不能总是知道元素在上下文中的添加位置。

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. (添加):由于只有一个“最后”元素,我认为Armen使用 anid是有道理的,尽管不是他这样做的方式。根本不需要计数器,只需使用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 回答