0

親メニューに。がある<li> tag場合、親メニューのにclass="current"を追加する方法がわからないようです。jQueryを使用してこれを実装しようとしましたが、ページをクリックするとページが再読み込みされるため、機能しません。そこで、パラメータとして使用するためにデータベースに呼び出されるフィールドを追加しただけです。以下は私のPHPコードです。<li> tagclass="active"name

echo '<ul>';
    $main_menu = model::getMainMenu();
       foreach($main_menus as $menu){
            echo '<li class="dropdown">
            <a href=?page='.$menu['name'].'&m=1 class='.(($_GET['page'] == $menu['name'])?'current':'').'>'.$menu['title'].'</a>';
            $sub_menus = model::getSubMenu($menu['id']);
            if( $sub_menus != '' ){
              echo '<ul>';
              foreach($sub_menus as $sub){
                echo '<li><a href=?page='.$sub['name'].' class='.(($_GET['page']==$sub['name'])?'current':'').'>'.ucwords( $sub['title'] ).'</a></li>';
              }
             echo '</ul>';
            }
            echo '</li>';
    }
</ul>

$_GET['page'] and the $sub['name'](私のURL構造は単純にこのようになっています)を比較することによってのみ、現在アクティブなサブページまたはページを検出できますindex.php?page=home。ただし、現在子が選択されているときに親メニューを検出する方法がわかりません。

ここにページをアップロードしました

4

2 に答える 2

2

以下のコードを参照してください。それが完全に正しいかどうかはわかりませんが、アイデアはそれから明確でなければなりません。基本的に、すべてのLI htmlを変数に収集し、LIの1つがアクティブな場合はフラグをtruに設定できます。そして、フラグ変数の状態を考慮してすべてをエコーするよりも。

echo '<ul>';
    $main_menu = model::getMainMenu();
       foreach($main_menus as $menu) {                
            $sub_menus = model::getSubMenu($menu['id']);
            $lis = "";
            $hasCurrent = false;
            if($sub_menus != '') {
                foreach($sub_menus as $sub) {
                    $lis .= '<li><a href=?page='.$sub['name'].' class='.(($_GET['page']==$sub['name'])?'current':'').'>'.ucwords( $sub['title'] ).'</a></li>';
                        if($_GET['page']==$sub['name']) {
                            $hasCurrent = true;
                        }
                }
                echo '<li class="dropdown ' . $hasCurrent ? 'active' : '' . '">
                      <a href=?page='.$menu['name'].'&m=1 class='.(($_GET['page'] == $menu['name'])?'current':'').'>'.$menu['title'].'</a>';
                if($lis != '') {
                    echo '<ul>';
                    echo $lis;
                    echo '</ul>';
                }
            }
            echo '</li>';
    }
</ul>
于 2012-09-20T14:07:15.503 に答える
0

考えられる解決策の1つ:

'active'タグにクラスではなくIDを付けます-一度にアクティブにできるのは1ページだけです(おそらく)。

次に、Javascriptを使用してDOMをウォークスルーし、親要素を見つけます。

var active_elem = document.getElementById("active");
var parent_element = active_elem.parentElement.parentElement;

次に、クラス/IDまたは実行したいことを割り当てます。

于 2012-09-20T14:00:10.537 に答える