【问题标题】:jQuery lavaLamp, misbehaving with child <ul>'sjQuery lavaLamp,与子 <ul> 的行为不端
【发布时间】:2011-03-23 04:29:40
【问题描述】:

我一直在使用http://nixboxdesigns.com/projects/jquery-lavalamp/ 在我正在构建的一个新网站上使用导航菜单,它工作得很好,而且非常简单,然后我开始想知道我是否可以在菜单中添加一些子导航选项并设置关于构建它。我遇到的麻烦是让 lavaLamp 插件忽略嵌套/子 ul/li 的。

您可以在此处查看该问题的实时示例:http://www.weleasewodewick.com/redesign2 - 将鼠标悬停在“博客”li 上,然后悬停在弹出的子菜单上。

我不会发布插件的完整源代码,因为它很长,但您应该可以直接在此处查看它们:

lavaLamp jQuery 插件

http://www.weleasewodewick.com/redesign2/includes/jquery.lavalamp.js

菜单标记

<nav> 
 <article> 
  <ul> 
   <li><a href="#Home" alt="#">Root</a></li> 
   <li><a href="#About" alt="#">Who?</a></li> 
   <li><a href="#Projects" alt="#">Projects</a></li> 
   <li><a href="#Resume" alt="#">Blog</a> 
     <ul class='children'> 
      <li class="page_item page-item-18"><a href="http://localhost/wordpress/?page_id=18" title="History">History</a></li> 
      <li class="page_item page-item-13"><a href="http://localhost/wordpress/?page_id=13" title="Our Company">Our Company</a></li> 
      <li class="page_item page-item-15"><a href="http://localhost/wordpress/?page_id=15" title="Our Staff">Our Staff</a></li> 
     </ul> 
</li> 
    <li><a href="#Resume" alt="#">Contact</a></li> 
   </ul> 
  </article> 
 </nav> 

lavaLamp 激活

$(function() { $('nav>article>ul').lavaLamp(); });

非常感谢您对此问题的意见:)

** 目的 ** 这个模型的最终归宿是 WordPress 模板,因此菜单的嵌套结构大多需要保持不变。

非常感谢 狐狸精

【问题讨论】:

    标签: jquery nested html-lists lavalamp


    【解决方案1】:

    嗯,终于搞定了:) 这是演示http://jsbin.com/uyali3

    使用&lt;ul&gt;作为子节点很难完成这个任务,所以我把它改成了&lt;div&gt;

    去看看代码你自己 =)

    注意:下次发布问题时,请务必提供正确的代码/HTML。我带我去45 min 了解你的整个代码。我终于找到了解决您问题的方法=)

    代码

        <!DOCTYPE html>
        <html>
        <head>
        <title> cssFix </title>
        <meta charset=utf-8 />
        <style type="text/css">
    
            body { background : #2f2f2f; }
    
             ul  li {
            display:inline;
            float:left;
            list-style-type:none;
            margin-right:10px;
            position:relative;
            z-index:5;
            }
             ul  li.backLava {
            -moz-border-radius :6px;
            background:none repeat scroll 0 0 #009912;
            }
             ul  li a {
            color:#B9B9B9;
            display:block;
            font: bold 14px Arial;
            padding:17px 10px 6px;
            position:relative;
            text-decoration:none;
            text-shadow:0 1px 0 #38302F;
            }
             ul  li  a:hover {
            color:#ff0;
            font-size:14px;
    
            }
            ul  li a:active {
            color:#FFFFFF;
            }
            .children {
            background-color:#333333;
            left:-999em;
            list-style:none outside none;
            min-width:100px;
            position:absolute;
            }
    
            li:hover .children {
            -moz-border-radius:6px 6px 6px 6px;
            background:none repeat scroll 0 0 rgba(0, 0, 0, 0.4);
            left:auto;
            margin:0;
            padding:10px;
            }
        </style>
        </head>
        <body>
            <ul style="position: relative;" class="ulclass">
                <li class="selectedLava"><a alt="#" href="#Home">Root</a></li>
                <li><a alt="#" href="#About">Who?</a></li>
                <li><a alt="#" href="#Projects">Projects</a></li>
                <li>
                    <a alt="#" href="#Resume">Blog</a>
                    <div class="children"> 
                        <span><a href="#">History</a></span> 
                        <span><a href="#">Our Company</a></span> 
                        <span><a href="#">Our Staff</a></span> 
                    </div> 
                </li>
                <li><a alt="#" href="#Resume">Contact</a></li>
            </ul>
    
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" ></script>
       <script type="text/javascript" src="http://www.weleasewodewick.com/redesign2/includes/jquery.lavalamp.js" ></script>
       <script type="text/javascript" >
            $(function() {
                $('ul').lavaLamp();
            });
        </script>
        </body>
        </html>
    

    【讨论】:

    • 很抱歉给您带来了困惑——我曾希望看到完整的源代码会更容易理解。我猜不会。我现在将具体更新问题。虽然您的解决方案很棒并且有效,但我真的在寻找它在提供的结构中运行 - 即因为这个设计是为 Wordpress 设计的,它在其页面导航创建中使用嵌套的 ul。
    • 改变了我的想法......答案被接受。我将在我的 WordPress 安装中破解 /includes/post-template.php。不是最佳实践,但我不打算分发主题:)
    • 更改整个模板不是一个好主意 :) 我相信这可以使用 ul 来完成,但这需要一些努力 =) 重新提出您的问题,我相信有人会回答你以正确的方式!请不要更改模板。
    【解决方案2】:

    我也有同样的问题,但我不想修改 wordpress 模板:

    首先,我考虑将“noLava”类添加到深度 > 1 的每个 &lt;li&gt;,因此我尝试使用自定义类扩展 Walker 类 - 但没有成功。

    然后我开始修改lavalamp jquery插件,尝试了一整天找到了解决方案here,所以我修改如下,效果很好:)

    {find `var $li = jQuery('li[class!=noLava]', this);` and replace with:}
    
        //var $li = jQuery('li[class!=noLava]', this); //default one
    
        //by Paolo Bergantino, via https://stackoverflow.com/questions/965816/what-jquery-selector-excludes-items-with-a-parent-that-matches-a-given-selector/965962#965962
        jQuery.expr[':'].parents = function(a,i,m){
            return jQuery(a).parents(m[3]).length < 1;
        }; 
    
        var $li = jQuery('li', this).filter(':parents(.children, .sub-menu)'); //for worpress :) by lelebart
    

    也许最好的解决方案是保留原始行为并添加此行为。

    编辑:[在线演示]

    【讨论】:

      【解决方案3】:

      我分叉了 LavaLamp 插件,并添加了一个“hoverTarget”选项。 它使用“目标”元素内的元素进行悬停检测。 (默认:“a”)

      这解决了子列表的问题。

      在这里获取:GitHub

      【讨论】:

        猜你喜欢
        • 2013-08-14
        • 1970-01-01
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-02
        相关资源
        最近更新 更多