jquery - 使用 jQuery 动态创建元素

标签 jquery

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

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

<div class="listContainer">
    <div class="listContainerItem">
        <input type="checkbox" value="1" />
        <div class="listContainerItemLabel">Checkbox 1</div>
    </div>
</div>

在将数组传递给函数的情况下,创建它的最有效方法是什么?我一直在尝试按如下方式完成它,但很快就遇到了主要的性能问题。

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);
    }
}

我查看了 .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);
}

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

关于jquery - 使用 jQuery 动态创建元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15201265/

相关文章:

javascript - js/jq中检测鼠标向上、向左、向右、向下移动

Javascript:如何从 json 文件读取值?

javascript - 如何在外部 JS 文件中使用 JQuery?

javascript - CSS 和 PHP 运行 exec 并返回原始页面

javascript - 一种使用 .load 和通配符的方法

javascript - 如何使用 jquery 将事件附加到新添加的 anchor

javascript - JQuery 隐藏 ajax 发布结果上的表行

javascript - 使用 jQuery 获取 dropzone 中的文件名

javascript - 从另一个选择中更改选择标签中的选项

jquery - 使用 Ransack 、 Rails 4 将多个搜索表单结果合并为一个