我通过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)
:最后不会这样做,因为我添加的元素不是列表中的最后一个。
我如何获得对(4)的引用?
编辑:并且请,没有eq()解决方案,我需要这是动态的,我不能总是知道在上下文中添加元素的位置。
答案 0 :(得分:6)
没有内置的方法来了解添加的最后一个元素是什么。你必须自己跟踪它。
至少有几种方法可以做到这一点。
您可以在代码中保留对它的引用。
您可以使用data-*
attribute或类,然后再去寻找它,例如:
// 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
(已添加) :由于只有一个“last”元素,我认为Armen's approach使用的是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有一些真实的用例。
答案 1 :(得分:5)
添加最后一个元素时,可以尝试添加一个类:
.addClass("lastAdd");
然后你会得到参考$(".lastAdd")
答案 2 :(得分:2)
只需在“li”元素中添加一些属性(例如id),然后按此属性值进行搜索。
答案 3 :(得分:1)
初始化新变量
var counter = 1;
添加元素增量计数器后
$('<li id=newli' + counter +'>test</li>').appendTo('body');
counter++;
当你可以获得该项目时,请致电:
var Id = $('#newli' + counter);
$(Id).
答案 4 :(得分:0)
如果你真的需要jQuery来调用你按顺序插入的元素,你必须添加自己的函数(你也可以改变它,但我不推荐它......):
var inserted = [];
$.fn.insertBeforeAndRecall = function(){
inserted.push(this);
this.insertBefore(arguments);
}
function getLastInserted() {
return inserted[inserted.length-1];
}
您可以通过拨打insertBeforeAndRecall
而不是insertBefore
来使用它。