2017-08-30 1 views
0

Ich habe ein Sidebar-Dropdown-Menü, das mit jquery betrieben wird, aber wenn Benutzer auf das Element klickt, wird die Seite aktualisiert und das Menü wird minimiert. Um dies zu lösen, um es erweitert zu halten, entschied ich mich, die REQUEST_URI mit der Menüelement-URL zu vergleichen. Wenn sie gefunden wird, werde ich das Klickereignis auslösen. Um dies zu erreichen habe ich die snippedJquery-Code für hierarchisches Element funktioniert nicht für einen bestimmten Wert in einer Schleife

$("a[href='<?php echo $citems->url;?>']").parents("li").parents("ul.dropdown-menu").prev(".dropdown-toggle").trigger("click"); 

die für alle Artikel funktioniert, außer für ein bestimmtes Element, das im Menüpunkt Liste an drittletzte Position erscheint. Unten ist der Code, den ich in dem bin ich die Ausführung der Frage bin vor:

<nav class="navbar navbar-default sidebar" role="navigation"> 
     <div class="container-fluid"> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1"> 
      <span class="sr-only">Toggle navigation</span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      </button>  
     </div> 
     <div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1"> 
     <ul class="nav navbar-nav asurion-sidebar" > 
      <?php 
      $nav_menu_items = wp_get_nav_menu_items('left-sidebar'); 
      $menu_items = wpse170033_nav_menu_object_tree($nav_menu_items); 
      $parents = get_post_ancestors($post->ID); 



      foreach($menu_items as $items) 
      { 

       $parents1 = get_post_ancestors($items->ID); 

       if(count($items->children) > 0) 
       { 

       ?> 
       <li class="dropdown first-level"> 
        <a href="#" class="dropdown-toggle " data-toggle="dropdown"><i class="fa <?php echo $items->classes[0];?>" aria-hidden="true"></i><?php echo $items->post_title;?> <i class="fa fa-angle-down menu-arrow" aria-hidden="true"></i></a> 
        <ul class="dropdown-menu forAnimate" role="menu"> 
        <?php 
         foreach($items->children as $citems) 
         { 
         if(count($citems->children) > 0) 
         {?> 
          <li class="dropdown thirdlevel "> 
          <a style="cursor:pointer" class="dropdown-toggle naveen" data-toggle="dropdown-submenu"><i class="fa <?php echo $citems->classes[0];?>" aria-hidden="true"></i><?php echo $citems->post_title;?><i class="fa fa-angle-down menu-arrow" aria-hidden="true"></i></a> 
           <ul class="dropdown-submenu forAnimate lastlevel" role="menu">  
           <?php 
           foreach($citems->children as $ccitems) 
           { 
            if(strpos($ccitems->url,'localhost')){ 
             $sea_domain = 'localhost'; 
            }elseif(strpos($ccitems->url,'asurion.com')){ 
             $sea_domain = 'asurion.com'; 
            } 
            $compareUrl = explode($sea_domain,$ccitems->url) ;      
              if($_SERVER['REQUEST_URI'] == $compareUrl[1]){ 
            ?> 
            <script> 
            $(document).ready(function(){ 
            $("a[href='<?php echo $ccitems->url;?>']").parents("li").parents("ul.dropdown-submenu").prev("a[data-toggle='dropdown-submenu']").trigger("click"); 
            }); 
            </script> 
            <?php } 
            echo "<li><a target='".$ccitems->target."' href='".$ccitems->url."'>".$ccitems->post_title."</a></li>"; 
           } 
           ?> 
           </ul> 
          </li> 
         <?php 
         } 
         else 
         { 
         if(strpos($citems->url,'localhost')){ 
           $sea_domain = 'localhost'; 
          }elseif(strpos($citems->url,'asurion.com')){ 
           $sea_domain = 'asurion.com'; 
          } 
          $compareUrl = explode($sea_domain,$citems->url);   
          echo "<li><a target='".$citems->target."' href='".$citems->url."'>".$citems->post_title."</a></li>"; 
          if($_SERVER['REQUEST_URI'] == $compareUrl[1]){ 
           ?> 
           <script> 
           $(document).ready(function(){ 
           $("a[href='<?php echo $citems->url;?>']").parents("li").parents("ul.dropdown-menu").prev(".dropdown-toggle").trigger("click"); 
          }); 
         </script><?php 
         } 
         } 
         } 
        ?> 
        </ul> 
       </li> 
       <?php 
       } 
       else 
       { 
       if(get_the_title($post->ID)=="Dashboard" && $items->post_title=="Home" && count($parents)==0) 
       { 
        echo "<li class='active'><a target='".$items->target."' href='".$items->url."'> <i class='fa ".$items->classes[0]."' aria-hidden='true'></i>".$items->post_title."</a></li>"; 
       } 
       else 
       { 
        echo "<li><a target='".$items->target."' href='".$items->url."'> <i class='fa ".$items->classes[0]."' aria-hidden='true'></i>".$items->post_title."</a></li>"; 
       } 

       } 
      } 

      ?> 
     </ul> 
     </div> 
     </div> 
    </nav> 

Jede Hilfe würde geschätzt.

Hier wird Array für Sidebar-Menü wiederholt werden: Array, hier in der Anordnung eines der Position, für die der jquery Schnipsel versagt ist unter „Gerät“> „Telefon Simulators“

Dies ist die Extracted HTML code von Quelle Code (Es spielt keine js Code als Geige doesnt enthalten js Code erlauben writtent in hTML-Abschnitt zu, JS-Code zu finden, blättern oben)

+0

Frage aktualisiert mit Array in einer jsfiddle URL mit einem Beispiel Item iteriert, wo das Snippet zwischen der Schleife scheitert –

+1

Können Sie bitte Ihren endgültigen 'HTML' Code posten? Nicht php. Ich bin nicht gut in PHP (vielleicht kann jemand), also kann ich Ihre 'html' Struktur überhaupt nicht kennen. und Ihre jsfiddle, alse zeigen nichts außer einem Haufen von Wörtern. Ich möchte Ihnen helfen, aber ich kann nicht – LIXer

+0

@LIXer Hier ist das endgültige HTML aus Quelle extrahiert, da JS fidle den JS-Code in HTML-Abschnitt nicht akzeptieren, habe ich den Js-Code daraus entfernt. Wenn Sie den JS-Code finden, wurde er in Frage erwähnt: https://jsfiddle.net/y5Lc16rz/, finden Sie

Antwort

0

ich kann mir nicht vorstellen, warum Sie Ausgabe

<script> 
           $(document).ready(function(){ 
           $("a[href='<?php echo $ccitems->url;?>']").parents("li").parents("ul.dropdown-submenu").prev("a[data-toggle='dropdown-submenu']").trigger("click"); 
           }); 
           </script> 

in a Schleife, wird es Ihren HTML-Code sieht chaotisch. und Sie sollten nicht so viele $(document).ready(...) überhaupt ausgeben.

können Sie Ihrem <A /> einen speziellen Klassennamen wie 'xxx' geben und den Skriptcode vor </body> ausgeben.

<script> 
           $(document).ready(function(){ 
           $("a.xxx").parents("li").parents("ul.dropdown-submenu").prev("a[data-toggle='dropdown-submenu']").trigger("click"); 
           }); 
           </script> 

ist es ein wenig besser.

und wenn Sie den Menüstatus behalten möchten, sollten Sie cookie oder localStorage verwenden, nicht auf diese Weise.

und jsfiddle wollen Sie trennen Sie Ihre HTML, CSS, JS-Code, aber durch Ihre Art und Weise, Ihre HTML und JS kann nicht getrennt werden, es ist nicht gut. Sie können etwas CSS zur Verfügung stellen, damit die Ergebnisseite jsfiddle besser aussieht, es kann jemandem helfen, Ihre Struktur zu verstehen.

+0

Ist Localstorage intakt mit Seitenaktualisierung? –

+0

@OMTheEternity der Ursache. Sie können einige grundlegende Tutorials dazu lesen, wie zum Beispiel MDN. localStorage kann Daten für immer nur dann speichern, wenn der Benutzer sie bereinigt, aber es ist nur "lokal". – LIXer

Verwandte Themen