我正在基于从处理程序返回的数组构建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函数,但不确定如何实现它.有人能指出我正确的方向吗?
我会从这样的事情开始:
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 模板引擎
| 归档时间: |
|
| 查看次数: |
2477 次 |
| 最近记录: |