0

以下をアーカイブしたいと思います: Onclick ツリー内の次の ul をトグルする必要があります (動作) その後 (!) クラスは treeExpanded から treeCollapsed に変更する必要がありますが、取得できません...

    ...
    <li>
        <a class="treeExpanded">Toggle</a>
        <span>xyz</span>
        <ul class="steps">
        ...
        </ul>
    </li>
    ...

動作しますが、クラスはすぐに変更されます:

    $j('.treeExpanded').click (function () {
        $j(this).toggleClass('treeCollapsed','treeExpanded').nextAll('ul').slideToggle("slow");
    });

も機能しますが、クラスはすぐに変更されます:

    $j('.treeExpanded').click (function () {
        $j(this).nextAll('ul').slideToggle("slow");
        $j(this).toggleClass('treeCollapsed','treeExpanded');
    });

動作しません:

    $j('.treeExpanded').click (function () {
        $j(this).nextAll('ul').slideToggle("slow", function () {
            $j(this).parents('a:first').toggleClass('treeCollapsed','treeExpanded');
        });
    });
4

2 に答える 2

1

要素を変数に保存して、コールバックで使用できます

$j('.treeExpanded').click (function () {
    $this = $j(this);
    $this.nextAll('ul').slideToggle("slow", function () {
        $this.toggleClass('treeCollapsed','treeExpanded');
    });
});
于 2012-11-25T21:04:23.667 に答える
0

次のように試すことができます:

  $('.treeExpanded').toggle(function(){ 
     $(this).nextAll('ul').removeClass("treeCollapsed");
     $(this).addClass("treeExpanded");
  }, function(){ 
     $(this).nextAll('ul').removeClass("treeExpanded");
     $(this).addClass("treeCollapsed");
  });

それらの線に沿った何か。これは、クリック自体をいじるよりもうまく機能することがわかりました。

于 2012-11-25T21:09:05.917 に答える