开发者问题收集

使用 jQuery 动态创建元素

2013-03-04
4451

我正在基于处理程序返回的数组在 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 函数,但不太确定如何实现它。有人能指出我正确的方向吗?

3个回答

我会从类似这样的内容开始:

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。我认为您也可以从 JS 模板引擎中受益,例如 mustache.js

Blender
2013-03-04

您是否希望这些元素一次只出现一个?还是只是在页面加载时从数组中动态创建?

最后:

html

    <div class="listContainer">
       <div class="listContainerItem"></div>
     </div>  

和 jquery

var array = ['1', '2', '3', '4', '5'];

 $.each(array, function (index, value) {
    $(".listContainerItem").append('<input type="checkbox" value="' + value + '" /> <div         class="listContainerItemLabel">Checkbox ' + value + '</div>');
 });

http://jsfiddle.net/jeremythuff/HEKjk/

并且一些 .click 事件可以为您提供第一个效果

Jeremythuff
2013-03-05

当按下代码中的按钮时,它会检查输入字段是否已填写 如果为空,它会弹出一个窗口提醒您 如果不为空,它会获取输入字段的值,创建一个复选框并将输入的值放在复选框旁边。

表单的 HTML

<form name="formName" id="listContainerItem">
    <input id="newinput" type="text" value=""/><button id="button">Add new rule</button> <br />
    <input type="checkbox" value="1" /><span class="listcontainerItemLabel" />Checkbox 1 <br />
</form>

Javascript

$(#button).click(function() {
function addLine(e) {
        e.preventDefault();
        var x = document.getElementById('newinput').value;
        if(x == '') {
            alert('not filled in')
        } else {
            $('#listContainer').append('<input type="checkbox" value="1" /><span class="listcontainerItemLabel" />'+x+  '<br />')
        }
    }

});

请记住 document.getElementById('newinput') 也可以这样写: $('#newinput')

您所要做的就是根据您的需要稍微更改将要附加的内容。

Matthias Wegtun
2013-03-04