1

我有一个循环:

for (index = 0; index < total_groups; index += 1) {

    groups[index].list_item = $(list_item_snippet);

    // Closure to bind the index for event handling
    (function (new_index) {

        groups[index].list_item.find('.listing-group-title')
                               .html(groups[index].Group.Name)
                               .click(function(e){

            fns.manageActiveGroup(new_index, groups);
            return false;
        });

    })(index);

    // Append to DOM
    mkp.$group_listing.append(groups[index].list_item);
};

我宁愿不要append()在每次循环触发时调用。

我知道我可以使用字符串并将标记与每个循环迭代连接起来,并将字符串附加到mkp.$group_listing末尾,但是这会使对象变平并且绑定丢失(我不依赖于 ID)。

有没有一种方法可以将我的对象添加到一个数组中,并在底部一次性将它们全部附加到 HTML 中?

假设:

  • $(list_item_snippet)包含一些定义列表项的 HTML(并包含一个带有 class 的元素.listing-group-title)。
  • groups是在我的脚本中定义“组”的 JSON 块
  • 关闭工作完美

编辑:

发现我可以使用以下语法来追加多个元素:

mkp.$group_listing.append(groups[0].list_item, groups[1].list_item );

但我显然需要自动化它——它不是一个数组,它只是可选的附加函数参数,所以我不知道该怎么做。

4

3 回答 3

4

要将元素数组附加到选择器,您可以使用以下命令:

$.fn.append.apply($sel, myArray);

在您的情况下,由于它实际上.list_item是您需要的每个数组元素的属性,因此您可以$.map先使用它来提取它们:

$.fn.append.apply(mkp.$group_listing, $.map(groups, function(value) {
     return value.list_item;
}));
于 2012-11-04T14:32:39.293 回答
0

on()如果您使用如下方式绑定它,而不是按照您所做的方式绑定它,

$(document).on('click', '.listing-group-title', function() {
    // click handler code here
});

您可以展平 HTML 并将其附加到一个语句中,它仍然可以工作。

注意:为提高效率,请将document上述语句中的选择器替换为匹配最近的父级的选择器.listing-group-title

于 2012-11-04T13:55:48.550 回答
0

是的。使用 jQueryadd方法将所有项目添加到 jQuery 对象。然后附加那个对象。

http://api.jquery.com/add/

编辑:示例:

var arr = $();

for (index = 0; index < total_groups; index += 1) {

    groups[index].list_item = $(list_item_snippet);

    // Closure to bind the index for event handling
    (function (new_index) {
        ...
    })(index);

    // Add to jQuery object.
    arr.add(groups[index].list_item));
};

mkp.$group_listing.append(arr);
于 2012-11-04T14:07:02.243 回答