jQuery,只有一名儿童受影响

jQuery, only one child affected

我正在尝试制作一个简单的手风琴菜单。

我有这样的代码:

jQuery(document).ready(function ($) {
    $("#secondMenu > li > span").click(function () {
        if ($("#secondMenu > li > span").hasClass("icon-square-plus")) {
            $("#secondMenu > li > ul").slideDown();
            $("#secondMenu > li > span").removeClass("icon-square-plus");
            $("#secondMenu > li > span").addClass("icon-square-minus");
        } else {
            $("#secondMenu > li > ul").slideUp();
            $("#secondMenu > li > span").addClass("icon-square-plus");
            $("#secondMenu > li > span").removeClass("icon-square-minus");
        }
    });

    $("#secondMenu > li > ul > li > span").click(function () {
        if ($("#secondMenu > li >  ul > li > span").hasClass("icon-square-plus")) {
            $("#secondMenu > li > ul > li > ul").slideDown();
            $("#secondMenu > li > ul > li > span").removeClass("icon-square-plus");
            $("#secondMenu > li > ul > li > span").addClass("icon-square-minus");
        } else {
            $("#secondMenu > li > ul > li > ul").slideUp();
            $("#secondMenu > li > ul > li > span").addClass("icon-square-plus");
            $("#secondMenu > li > ul > li > span").removeClass("icon-square-minus");
        }
    });
});

问题是,当我单击 span 时,菜单中的所有项目都会受到影响。如何让它只影响选定的一个?

试试这个:您正在向所有匹配的元素添加和删除 class,而您需要为单击的元素执行此操作。使用 this 获取点击元素,如下所示

jQuery(document).ready(function ($) {

$("#secondMenu > li > span").click(function(){
    if ( $(this).hasClass("icon-square-plus")) {
        $(this).slideDown();
        // you can chain the addClass and removeClass calls
        $(this).removeClass("icon-square-plus").addClass( "icon-square-minus" );
    } else {
        $(this).slideUp();
        $(this).addClass( "icon-square-plus" ).removeClass( "icon-square-minus" );
    }
});

$("#secondMenu > li > ul > li > span").click(function(){
    if ( $(this).hasClass( "icon-square-plus" ) ) {
        $(this).slideDown();
        $(this).removeClass( "icon-square-plus").addClass( "icon-square-minus" );
    } else {
        $(this).slideUp();
        $(this).addClass( "icon-square-plus" ).removeClass( "icon-square-minus" );
    }
});

});

您可以使用 this 来 select 被点击的元素。 和 parent() 访问父元素以到达 ul 元素 jQuery(文档).ready(函数($) {

$("#secondMenu > li > span").click(function(){
    if ( $(this).hasClass( "icon-square-plus" ) ) {
        $(this).parent().find("ul").slideDown();
        $(this).removeClass( "icon-square-plus" );
        $(this).addClass( "icon-square-minus" );
    } else {
        $(this).parent().find("ul").slideUp();
        $(this).addClass( "icon-square-plus" );
        $(this).removeClass( "icon-square-minus" );
    }
});

$("#secondMenu > li > ul > li > span").click(function(){
    if ( $(this).hasClass( "icon-square-plus" ) ) {
        $(this).parent().find("ul").slideDown();
        $(this).removeClass( "icon-square-plus" );
        $(this).addClass( "icon-square-minus" );
    } else {
        $(this).parent().find("ul").slideUp();
        $(this).addClass( "icon-square-plus" );
        $(this).removeClass( "icon-square-minus" );
    }
});
});

如果没有 fiddle 很难判断,但是 search/replace 可以帮助您

例如在您的第一次点击处理方法中替换

$("#secondMenu > li > span") 对于 $(this)

$("#secondMenu > li > ul") 对于 $(this).closest("li").find("ul")

第二种点击方法类似

关键字 this 将影响仅限于单击的元素