リスト要素をループし、リスト要素に別のリストが含まれている場合はクラスを追加する

ここではかなり単純な問題ですが、それは少し私を盗んでいる。

私はアコーデオンのメニューを次のように設定しました:


そして、私はアコーディオンを実行するjQueryスクリプトを持っています:

function accordionMenu() {
$('ul.navigation ul').hide();
$('ul.navigation li a').click(
    function() {
        var parentElement = this.parentNode.parentNode.id;
        var elementTest = $(this).next();

        if((elementTest.is('ul')) && (elementTest.is(':visible'))) {
            $('#' + parentElement + ' ul:visible').slideUp('fast');
            $(this).removeClass('active');
            return false;
        }
        if((elementTest.is('ul')) && (!elementTest.is(':visible'))) {
            $('#' + parentElement + ' ul:visible').slideUp('fast');
            elementTest.slideDown('fast');
            $('ul.navigation a').removeClass('active');
            $(this).addClass('active');
            return false;
        }
    }
);
}

$(document).ready(function() {accordionMenu();});

Now I need to figure out how to loop through the list items, and find the ones that have lists following them (ie, the ones that when clicked, drop down to reveal the hidden list.). Then I need to add a span on the end of each one (inbetween and

    ). That's it really. It's just confusing me - how should I go about doing it?

    Thanks,

    Alex

2
あなたの質問のタイトルはあなたがクラスを追加したいと言っていますが、質問そのものは 要素を追加したいと言います。
追加された 著者 Anthony Grist,

4 答え

このシナリオでは、:has has セレクタが最適です。

$("#menu li:has(ul)").addClass("hasSubMenu");
1
追加された

これを試すことができます。

$('ul.navigation li').filter(function(){
    return $(this).children('ul').length > 0;
}).each(function(){
    $(this).find('a').after('');
})
.addClass('className');
1
追加された
$('ul.navigation').children().has("ul").each(function(){
    $(this).children("a").append("test");              
});

これはうまくいくはずです:)あなたのプロジェクトで幸運。

1
追加された
$("#menu ul").each(function(){
    $(this).closest("li").addClass("whatever_class_you_need")
        .find("a").first().after("something goes here");
});
1
追加された