使用jQuery动态创建元素

Ste*_*lan 6 jquery

我正在基于从处理程序返回的数组构建jQuery中的复选框项列表.

包含元素是.listContainer下面的元素,然后我想要添加到其中的每个动态元素采用.listContainerItem元素的形式.每个项目都有基于创建它的数组项的复选框值和标签.

<div class="listContainer">
    <div class="listContainerItem">
        <input type="checkbox" value="1" />
        <div class="listContainerItemLabel">Checkbox 1</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

在传递数组的函数的位置,创建它的最有效方法是什么?我一直在努力完成它,如下所示,但很快遇到了主要的性能问题.

function AddItemToListContainer(item) {
    var currentItems = $j("#listContainerAvailable .listContainerItem");
    if ($j.grep(currentItems, function (e) { return $j(e).find(":checkbox:first").val() == item.Id; }).length === 0) {
        labelDiv = $j("<div />").addClass("listContainerItemLabel").html(item.Text);
        itemToAdd = $j("<div />").addClass("listContainerItem").append("<input type=\"checkbox\" value=\"" + item.Id + "\" />").append(labelDiv);
        currentItems.append(itemToAdd);
    }
}
Run Code Online (Sandbox Code Playgroud)

我看过.map函数,但不确定如何实现它.有人能指出我正确的方向吗?

Ble*_*der 1

我会从这样的事情开始:

var $container = $j('#listContainerAvailable');
var checkboxes = {};

function AddItemToListContainer(item) {
    if (checkboxes[item.Id]) return false;

    checkboxes[item.Id] = true;

    var $item = $j('<div />', {
        'class': 'listContainerItem',
    }).appendTo($container);

    $j('<input />', {
        'type': 'checkbox',
        'value': item.Id
    }).appendTo($item);

    $j('<div />',  {
        'class': 'listContainerItemLabel',
        'text': item.Text
    }).appendTo($item);
}
Run Code Online (Sandbox Code Playgroud)

只要创建页面时这些元素都不存在,您就可以将它们添加到哈希表中,而不是通过 DOM 进行搜索。我认为您也会受益于Mustache.js这样的 JS 模板引擎