基于我见过的帖子。我通过单击超链接创建临时数组元素。我唯一的问题是它可以生成重复的元素,直到现在还没有解决:
var items = new Array();
$("ul.dropdown li a").click(function(e)
{
e.preventDefault();
var id = $(this).attr('href');
var name = $(this).text();
if(!$.findFromArray('id', id, items))
{
return false;
}
else
{
items.push({
"id" : id,
"name": name
});
//genate row
var newRow = $("<tr itemId=\"" + id + "\" />")
.appendTo(".form_list.left tbody")
.append("<td>" + name + "</td>")
.append("<td><a href=\"#\" class=\"deleteRow\">delete</a></td>");
$(".deleteRow", newRow).click(function(e) {
e.preventDefault();
items = $.removeFromArray('id', $(this).closest("tr").attr("itemId"), items);
$(this).closest("tr").remove();
});
}
});
我创建了一个函数“$ .FindFromArray”,它在数组中搜索insert,如果要避免在数组中插入并在表中生成一行,则返回FALSE:
$.findFromArray = function(property, value, arr)
{
$.each(arr, function(elem, index)
{
if(elem[property] === value)
{
return false;
}
});
};
但是这个函数总是让我返回FALSE。
在插入元素之前,我可以避免重复吗?如果有更好的方法...我希望我能提供帮助。
答案 0 :(得分:3)
将方法改为
$.findFromArray = function(property, value, arr)
{
var matching = $(arr).filter(function(index, elem)
{
return elem[property] === value;
});
return matching.length > 0;
};
如果 找到 数组中的元素(使其更具可读性),则会返回true
,所以你还应该将支票改为
if( $.findFromArray('id', id, items) )
删除了!
答案 1 :(得分:1)
你在$ .each中混合了index和element的顺序,你只从$ .each函数内部返回,而不是$ .findFromArray函数:
$.findFromArray = function(property, value, arr)
var ret=false;
$.each(arr, function(index, elem) {
if (elem[property] === value) ret=true;
});
return ret;
};