我编写了带有子菜单的移动导航代码,并尝试使用jQuery和javascript添加类,但是这两种方法都没有将class“ drop1”或“ drop2”添加到所单击的元素中。
我已经尝试捕获该错误,但是没有人
$("ul#main-menu > li[class ^= level1-]")
.prev("img")
.addBack()
.on("click", async ()=> {
try {
await $(this).addClass("drop1");
cl2 = this;
cl2.className += "drop1";
} catch(e) {
console.log(e);
}
})
.each((i, elem)=> {
if($(elem).hasClass("drop1")) {
let newElem = $(elem);
if($(elem).is("img")) {
newElem = $(elem).closest("li");
$(elem).removeClass("drop1");
newElem.addClass("drop1");
}
} else {
return;
}
newElem
.nextUntil("li")
.animate({
"transform": "rotate(180deg)"
}, 300);
newElem
.children("ul[class $= m1]")
.slideDown(300)
.children("li[href = #]")
.on("click", async ()=> {
try {
await $(this).addClass("drop2");
cl1 = this;
cl1.className += "drop2";
} catch(e) {
console.log(e);
}
})
.each((i, el)=> {
if($(el).hasClass("drop2")) {
newEL = $(el);
} else {
return;
}
newEL
.children("ul")
.slideDown(300);
});
});
答案 0 :(得分:1)
this
不是单击的元素。箭头函数内的this
与箭头函数外的相同,在这种情况下,可能是window
。 addClass
是同步的,在其上使用await
是禁止操作。
/*...*/.on("click", function() {
$(this).addClass("drop1");
});
PS:未处理的错误将冒出来,并最终在控制台中显示。仅当您确实要处理它时,才添加try { } catch
。