import $ from "./jquery.js";
// 需要存放的 data-click 数组
const deleteClickAttribute = [
"click1",
"click2",
"click3",
"click4",
"click5",
"click6",
"click7",
"click8",
"click8",
];
// 通过ID绑定的数组
const deleteClickIds = ["id1", "id3", "id2"];
//通过class绑定的数组
const deleteClickClasss = ["class1", "class2"];
const liEles = document.getElementsByTagName("li");
// 模拟添加事件
let el = document.getElementById("id1");
$("#id1").on("click", () => {
console.log(123);
});
el.onclick = () => {
console.log(123);
};
const unbind = ({ byAttributes, byIds, byClasss, unbindEles }) => {
// isOutermostlayer 是否为最外层
function recurrence(unbindEles, isOutermostlayer) {
let needReturn = false;
for (const el of unbindEles) {
if (needReturn) {
return;
}
// 判断id 是否存在于id数组
if (byIds.includes(el.id)) {
$(el).unbind("click");
$(el).removeAttr("click");
el.onclick = null;
// 最外层中断循环 里层中断递归且中断循环
if (isOutermostlayer) {
continue;
}
needReturn = true;
continue;
}
const classList = el.classList;
if (classList.length) {
const mixedClass = byClasss.find((classItem) =>
classList.contains(classItem)
);
if (mixedClass) {
$(el).unbind("click");
$(el).removeAttr("click");
el.onclick = null;
// 最外层中断循环 里层中断递归且中断循环
if (isOutermostlayer) {
continue;
}
needReturn = true;
continue;
}
}
const dataClick = el.getAttribute("data-click");
if (byAttributes.includes(dataClick)) {
$(el).unbind("click");
$(el).removeAttr("click");
el.onclick = null;
// 最外层中断循环 里层中断递归且中断循环
if (isOutermostlayer) {
continue;
}
needReturn = true;
continue;
}
if (el.children.length > 0) {
recurrence(el.children);
}
}
}
recurrence(unbindEles, true);
};
unbind({
byAttributes: deleteClickAttribute,
byIds: deleteClickIds,
byClasss: deleteClickClasss,
unbindEles: liEles,
});