2

jQuery Treeview プラグインを使用しています。プラグインhttp://jquery.bassistance.de/treeview/demo/のデモ ページにある「サンプル 1 - デフォルト」をご覧ください。私の場合、すべてのフォルダーとファイルはリンクです。たとえば、展開された「Folder 2」をクリックすると、最初に折りたたまれてから、リンクの場所に移動します。私が望む動作は、折りたたまれたものだけが最初に展開され、既に展開されている場合はこのままになることです。

動作を切り替えるプラグイン (jquery.treeview.js) のコードは次のとおりです。

66 this.filter(":has(>ul):not(:has(>a))").find(">span").click(function(event) {
67 toggler.apply($(this).next());
68 }).add( $("a", this) ).hoverClass(); 

すべてのリンクを取得する方法はすでにわかっていますが、これを変更する必要があります。

$('a').parent().parent().filter('.collapsable')

結果は、現在折りたたみ可能な (展開された) すべての li の配列になります: [li., li.collapsable]

しかし、そこから先に進む方法がわかりません:-(誰かが私を助けてくれることを願っています...

このコードを使用して、現在選択されている (class=selected) リンクの linkbehavior を既に正常に変更しています。

    $(".current").click(function(e){
        e.preventDefault();
    });

よろしくお願いします!

4

1 に答える 1

2

たぶん、私が本当にやりたいことは明確ではなかったので、次回は言語化を改善しようと思います;-)

私自身の質問に対する答えは次のとおりです。

$('li').filter('.collapsable').find('a:first:not(.current)').click(function(e){
            e.stopImmediatePropagation();
        });

似たようなものを探している人の助けになるかもしれません。

よろしくお願いします!!

更新 (ユーザーが後でページをリロードせずにノードを展開した場合、上記の投稿されたソリューションは機能しません)

    $('a').click(function(e){
        if ($(this).is('.current')) {
            e.preventDefault();
        } else if ($(this).parent().parent().is('.collapsable')) {
            e.stopImmediatePropagation();
        };          
    });

これは想定どおりに機能します。:-)

于 2010-01-28T07:34:43.827 に答える