Jquery 如果li有子菜单“阻止默认值”和“显示阻止子链接”,则使链接可单击

Jquery 如果li有子菜单“阻止默认值”和“显示阻止子链接”,则使链接可单击,jquery,Jquery,在下面的菜单中,如果没有子菜单链接,我希望链接表现正常,否则父链接应阻止默认设置,然后应在子菜单上设置一个类,该类将显示以前隐藏的子菜单项。问题是我无法获取$(this).next(“.submenu”).toggleClass(“opened”)

在下面的菜单中,如果没有子菜单链接,我希望链接表现正常,否则父链接应阻止默认设置,然后应在子菜单上设置一个类,该类将显示以前隐藏的子菜单项。问题是我无法获取
$(this).next(“.submenu”).toggleClass(“opened”)$(this)
的条件中

小提琴和下面的代码。提前谢谢


.wrap.子菜单{
显示:无;
}
。子菜单。已打开{
显示:块;
}
if(
美元(“.wrap ul li”)
.has(“.子菜单”)
.addClass(“hasSubMenu”)
);
$(“.wrap ul li”)。单击(函数(e){
控制台日志(“a”);
//我们只想针对具有
    子菜单的
  • if($(this).hasClass(“hasSubMenu”)){ //首先防止链接上的默认值 e、 预防默认值(); log($(this)); //现在查找.子菜单并添加类 $(本) .next(“子菜单”) .toggleClass(“打开”); }否则{ 日志(“测试:无子菜单”); } });
好的,我想我可能有答案了。在初始的
$(this)
中,我将内部的
$(this)
存储在一个变量中。我不知道为什么这应该起作用,但它似乎都起作用

if (
    $(".wrap ul li")
        .has(".submenu")
        .addClass("hasSubMenu")
);


$(".wrap ul li").click(function(e) {
    console.log("a");
    // we only want to target <li> that have a <ul> sub-menu
    if ($(this).hasClass("hasSubMenu")) {
        var $this = $(this)
        // first prevent default on the link
        e.preventDefault();
        console.log($(this));
        // now find .submenu and add class
        $this
            .find(".submenu")
            .toggleClass("opened");
    } else {
        console.log("test: no submenu");
    }
});
if(
美元(“.wrap ul li”)
.has(“.子菜单”)
.addClass(“hasSubMenu”)
);
$(“.wrap ul li”)。单击(函数(e){
控制台日志(“a”);
//我们只想针对具有
    子菜单的
  • if($(this).hasClass(“hasSubMenu”)){ 变量$this=$(this) //首先防止链接上的默认值 e、 预防默认值(); log($(this)); //现在查找.子菜单并添加类 美元这个 .find(“子菜单”) .toggleClass(“打开”); }否则{ 日志(“测试:无子菜单”); } });