我设置了循环通过复选框并在手风琴菜单顶部创建结果列表的代码。当您单击每个术语旁边的 X 时,它们会自行删除并取消选中与其关联的框。然而,当标签被删除时,列表开头的分隔逗号和冒号仍然存在。我有一种严厉的方法来处理这个问题,但我觉得它可以更干净、更快,但我想出的解决方案总是给我语法错误。
var divBlock = $(this).closest("h3 + div"); //finds parent h3 + div
aObject = divBlock.prev().find("a:first"); //gets the a link in the h3
originaltitle = aObject.html();
var liItems = divBlock.find("li");
for (var i = 0; i < liItems.length; i++) {
if (liItems[i].childNodes[0].checked) {
var searchterm = liItems[i].childNodes[1].innerHTML;
categoryString += "<div class='choice'>" + searchterm + "<a href=\"javascript:void(0);\" class=\"delete_search_term\" id=\"close_" + searchterm.replace(/\s/g, "-") + "\">(x)</a>,</div> ";
}
}
if (originaltitle.indexOf(": ") > 0) {
originaltitle = originaltitle.substring(0, originaltitle.indexOf(":"));
}
if (categoryString.length > 0) {
categoryString = categoryString.substring(0, categoryString.lastIndexOf(",")) + "</div>";
aObject.html(originaltitle + ": " + categoryString);
} else {
aObject.html(originaltitle.replace(":", "").trim());
}
该代码处理字符串的创建和标点符号的放置以格式化列表。除非我注释掉我的子子代码,否则下面的代码是我做的一切都会抛出错误的混搭。
$("a.delete_search_term").click(function () {
window.location = $(this).attr('href');
var itemName = this.id.replace("close_", "").toLowerCase();
var liItems = $(this).closest("h3").next().find("li");
for (var i = 0; i < liItems.length; i++) {
if (liItems[i].childNodes[0].id == itemName) {
liItems[i].childNodes[0].checked = false;
}
}
if (categoryString.length > 0) {
categoryString = categoryString.substring(categoryString.lastIndexOf(","));
subsub = categoryString.substring(0, 1);
$(subsub).remove();
}
$(this).parent().remove(); //Removes parent of selected object only
return false;
});
根据请求创建了一个 JSFiddle:http: //jsfiddle.net/w4AxR/1/