jquery最后添加的元素

jquery最后添加的元素,jquery,Jquery,我正在通过jQuery加载一些HTML元素: 考虑到这种情况: <li>test</li> (1) <li>test</li> (2) <li>test</li> (3) 我将得到最后一个li元素,即我标记为3的元素,如果我总是按顺序添加项,那就可以了。但是,如果我在两者之间添加一个新元素: <li>test</li> (1) <li>test</li> (2) <li

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

考虑到这种情况:

<li>test</li> (1)
<li>test</li> (2)
<li>test</li> (3)
我将得到最后一个li元素,即我标记为3的元素,如果我总是按顺序添加项,那就可以了。但是,如果我在两者之间添加一个新元素:

<li>test</li> (1)
<li>test</li> (2)
<li>test</li> (4)<-
<li>test</li> (3)
:last不行,因为我添加的元素不是列表中的最后一个

我如何获得对4的引用


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

没有内置的方法来知道最后添加的元素是什么。你得自己记录下来

至少有几种方法可以做到这一点

您可以在代码中保留对它的引用

您可以使用a或a类,稍后再查找,例如:

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

补充:因为只有最后一个元素,我认为使用id是有意义的,尽管不是他那样做的。完全不需要计数器,只需使用最后一个:


我倾向于选择13,但是1和2有一些实际的用例。

没有内置的方法来知道最后添加的元素是什么。你得自己记录下来

至少有几种方法可以做到这一点

您可以在代码中保留对它的引用

您可以使用a或a类,稍后再查找,例如:

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

补充:因为只有最后一个元素,我认为使用id是有意义的,尽管不是他那样做的。完全不需要计数器,只需使用最后一个:


我倾向于选择13,但是1和2有一些实际的用例。

当您添加最后一个元素时,您可以尝试添加一个包含以下内容的类:

.addClass("lastAdd");

然后,当您添加最后一个元素时,您将获得引用$.lastAdd

,您可以尝试使用以下元素添加一个类:

.addClass("lastAdd");

然后您将获得引用$.lastAdd

只需向li元素添加一些属性,例如id并按此属性值进行搜索。

只需向li元素添加一些属性,例如id并按此属性值进行搜索。

初始化新变量

var counter = 1;
添加元素增量计数器后

$('<li id=newli' + counter +'>test</li>').appendTo('body');
counter++;
初始化新变量

var counter = 1;
添加元素增量计数器后

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

如果确实需要jQuery调用按顺序插入的元素,则必须添加自己的函数,您也可以更改它,但我不建议这样做…:

var inserted = [];
$.fn.insertBeforeAndRecall = function(){
    inserted.push(this);
    this.insertBefore(arguments);   
}
function getLastInserted() {
    return inserted[inserted.length-1];
}
您可以通过调用InsertBeforeCall而不是insertBefore来使用它


如果确实需要jQuery调用按顺序插入的元素,则必须添加自己的函数,您也可以更改它,但我不建议这样做…:

var inserted = [];
$.fn.insertBeforeAndRecall = function(){
    inserted.push(this);
    this.insertBefore(arguments);   
}
function getLastInserted() {
    return inserted[inserted.length-1];
}
您可以通过调用InsertBeforeCall而不是insertBefore来使用它



它最后被添加到DOM中,或多或少没有什么-索引不是一个选项。一个选项是将加载元素的索引保存到某个有序列表中,即在数组中并弹出最后一个。jQuery没有内置函数来检测更改/最后一个更改?@Eirin如何添加新元素?使用下划线JS进行模板化,使用BackboneJS进行结构:这是最后一个添加到DOM中,或多或少没有什么-索引不是一个选项。一个选项是将加载元素的索引保存到某个有序列表中,即在数组中并弹出最后一个。jQuery没有检测更改/最后一个更改的内置函数?@Eirin如何添加新元素?使用下划线JS进行模板化,使用BackboneJS进行结构:这可以工作-应该比添加一个新列表并通过它进行解析使用更少的资源…但是如果使用该方法附加多个项,我认为选择器将返回该类的所有项,不仅仅是添加的最后一个…这可能会起作用-应该比添加新列表并通过它进行解析使用更少的资源…但是如果使用该方法附加多个项,我认为选择器将返回该类的所有项,不仅仅是最后添加的一个…以数字开头的id值在CSS中无效,尽管它们在HTML5中。由于jQuery使用CSS选择器,所以在使用jQuery查找它们时最好不要使用它们。由于其他原因,这种方法还排除了在元素上具有id的可能性,并生成了许多带有id的元素,这些id被添加到窗口中。但这并不意味着,如果在id前面加上前缀,那么它就不是一种可行的方法。$'test';变量Id=$'newli'+计数器;@阿门:没错,+1。您可能希望编辑链接在那里。以数字开头的id值在CSS中无效,尽管它们在HTML5中是有效的。由于jQuery使用CSS选择器,所以在使用jQuery查找它们时最好不要使用它们。由于其他原因,这种方法还排除了在元素上具有id的可能性,并生成了许多带有id的元素,这些id被添加到窗口中。但这并不意味着,如果在id前面加上前缀,那么它就不是一种可行的方法。$'test';变量Id=$'newli'+计数器;@阿门:没错,+1。你可能想要那里的编辑链接。不得不接受Cedrun的答案,因为他是第一个用一种方法解决我问题的人。
不过,我对你的解决方案投了更高的票,因为这里提到的所有方法都会起作用。@Eirin:是的,我也对Cedrun和Armen投了更高的票,我认为如果你不把它用于其他事情,id是合理的。很高兴为你整理好了。我不得不接受塞德伦的回答,因为他是第一个用一种方法解决我问题的人。不过,我对你的解决方案投了更高的票,因为这里提到的所有方法都会起作用。@Eirin:是的,我也对Cedrun和Armen投了更高的票,我认为如果你不把它用于其他事情,id是合理的。很高兴为你整理好了。