我有一个简单的页面,使用引导程序和 js/jquery。它通过 ajax 获取数据并创建要显示给查看器的条目,例如:
- 提出请求
-parse xml 创建包含所有数据的对象数组
- 按一个属性排序
创建 DOM 元素并 appendsTo 正确的父级。
到目前为止一切顺利。
现在,用户可以通过按钮更改属性以对数组进行排序。
我做了:
//deputados is the array, partido the property
deputados.sort(sort_by('partido', true, function (a) {
return deaccentuate0(a);//get rid of accents for sorting
}));
//here i create nodes in new order
for (var i = 0; i < deputados.length; i++) {
makePanelEntry($("#containerMaster"), deputados[i])
};
});
显然,新项目被附加到列表的末尾,这不是我想要的,它们应该替换页面中的现有元素。(创建和附加由 makePanelEntry() 处理,你需要看到这个吗?)。
问题是:
有没有办法一次清除容器(containerMaster)中的所有元素?我需要循环通过它并一一移除吗?这是这样做的正确方法吗?
我对这一切都很陌生。谢谢
[编辑 2]:这就是我创建元素的方式:基本上,它以正确的顺序和正确的类为引导“面板”创建元素,然后在开关中,使用每个 deputado 正确值填充面板。如果名称根据带有名称标签的div创建,依此类推。这些是国会议员的数据:P
deputado 是这样的:
var deputado = {
idCadastro: $(this).find("ideCadastro").text(),
condicao: $(this).find("condicao").text(),
matricula: $(this).find("matricula").text(),
idParlamentar: $(this).find("idParlamentar").text(),
nome: $(this).find("nome").text(),
nomeParlamentar: $(this).find("nomeParlamentar").text(),
sexo: $(this).find("sexo").text(),
uf: $(this).find("uf").text(),
partido: $(this).find("partido").text(),
gabinete: $(this).find("gabinete").text(),
anexo: $(this).find("anexo").text(),
fone: $(this).find("fone").text(),
email: $(this).find("email").text(),
//comissoes: $(this).find("comissoes").text(),,
print_name: function () {
console.log(deaccentuate0(this.nome));
}
};
函数makePanelEntry:
var makePanelEntry = function (parent, deputado) {
var elements = [];
var outter = $('<div/>', {
"class": "panel panel-default"
}).appendTo(parent);
var heading = $('<div/>', {
"class": "panel-heading"
}).appendTo(outter);
var title = $('<h3/>', {
"class": "panel-title"
}).appendTo(heading);
var row = $('<div/>', {
"class": "row"
}).appendTo(title);
var body = $('<div/>', {
"class": "panel-body",
}).appendTo(outter);
var bodyRow = $('<div/>', {
"class": "row",
}).appendTo(body);
$.each(deputado, function (prop, val) {
if (typeof val !== 'function') {
switch (prop) {
case "nomeParlamentar":
var np = $('<div/>', {
'class': "col-md-3 ",
text: val
});
elements[0] = np;
break;
case "partido":
var p = $('<div/>', {
'class': "col-md-1",
text: val
})
elements[1] = p;
break;
case "uf":
var u = $('<div/>', {
'class': "col-md-1",
text: val
})
elements[2] = u;
break;
case "nome":
var smallDiv = $('<div/>', {
'class': "col-md-3 italic smaller",
text: val
}).appendTo(bodyRow);
break;
case "fone":
$('<div/>', {
"class": "col-md-2 text-left",
text: "fone: 61 - " + val
}).appendTo(bodyRow)
break;
case "condicao":
var cond = $('<div/>', {
"class": "col-md-2 text-left",
text: val
}).appendTo(bodyRow)
elements[3] = cond;
break;
case "email":
$('<a/>', {
"class": "col-md-2 text-left",
text: val,
href: "mailto:" + val
}).appendTo(bodyRow)
break;
default:
break;
}
}
})
$.each(elements, function (i, e) {
$(e).appendTo(row)
})
};
sort_by 是这样的(在某处抓到):
var sort_by = function (field, reverse, primer) {
var key = function (x) {
return primer ? primer(x[field]) : x[field]
};
return function (a, b) {
var A = key(a),
B = key(b);
return ((A < B) ? -1 : ((A > B) ? 1 : 0)) * [-1, 1][+ !! reverse];
}
}