使用 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