1

正如您在下面的代码摘录中看到的那样,我正在运行一个循环来获取所有 li 项目的 ID。问题是在 ajax 回调之后附加了 li 元素。显然,新添加的元素不包含在我的初始循环中,因此我的任何点击、焦点事件都不起作用。“刷新”循环中的项目的最佳方法是什么?我尝试将循环封闭在一个函数中并在 ajax 回调中调用它,但它不起作用。

提前致谢 :)

<ul id="post-list">
    <li id="post-1"></li>
    <li id="post-2"></li>
    <li id="post-3"></li>
    <li id="post-4"></li>
    <li id="post-5"></li>
</ul>

var $postlist = $("#post-list > li");

$postlist.each(function(idx, li) {

    var list = $(li);
    var $postID = list.attr('id').replace('post-','');

    console.log($postID);
});
4

1 回答 1

2

将 jQuery 数组存储在数组中后$postlist,DOM 的更新不会改变。<li>而是在每次运行代码时收集元素:

var $postlist = $("#post-list");

$postlist.children("li").each(function() {

    var list = $(this);
    var $postID = list.attr('id').replace('post-','');

    console.log($postID);
});

this指循环内的 DOM 元素本身,each因此如果您不需要元素的数组索引,则可以省略函数参数。

要将事件添加到尚不存在的元素,请使用 jQueryon()方法在父对象上设置事件侦听器:

$postlist.on("click","li",function(){

    console.log('clicked: ' + $(this).attr('id'));

});
于 2013-07-16T17:41:16.357 回答