1

そこで、このhtml css jqueryナビゲーションメニューの非常に簡素化されたバージョンを作成し、以下のコードを指定すると、サブメニュー項目を、それが含まれているliであるかのように処理します。サブメニューulがliの一部として表示されていることは理解できると思います。問題は、サブメニューのリンクが実際にたどられ、preventDefault'edにならないように、その動作をどのように分離するかということです。

<html>
<head>
<style type="text/css">
    #content ul {margin:0;}
    #content ul li {float:left; background:#000; list-style:none;}
    #content ul li a {display:block; text-decoration:none; padding:10px 40px;}
    #content ul li ul {position:absolute; padding:0;}
    #content ul li ul li {float:none; background:#ccc;}
</style>
</head>

<body>
<div id="content">
    <ul>
        <li><a href="#">1</a></li>
        <li><a href="#">2</a></li>
        <li>
            <a href="#">3</a>
            <ul>
                <li><a href="#">A</a></li>
                <li><a href="#">B</a></li>
                <li><a href="#">C</a></li>
                <li><a href="#">D</a></li>
            </ul>
        </li>
        <li><a href="#">4</a></li>
    </ul>
</div>          
</body>
</html>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script>
<script type="text/javascript">
$('#content ul li').has('ul').click(function(e) {
    /* code to show/hide submenus */

    console.log(e);
    e.preventDefault();
});
</script>

編集:すべてのトップレベルのリンクとサブメニューのリンクを通常どおりに機能させたい。私が操作しようとしているのは、サブメニューがあるトップレベルのliだけです。

4

1 に答える 1

1

最初のセレクターを変更して、次のように「コンテンツ」の最初の子アンカーをターゲットにする場合:

$('#content > ul > li > a').click(function(e) {
    /* code to show/hide submenus */

    console.log(e);
    e.preventDefault();
});

それが動作します。代わりに、クリックイベントをバインドする各アンカータグにcssクラスを追加することをお勧めします。これははるかにクリーンになり、マークアップが変更されたときに破損する可能性が低くなります。

<div id="content">
    <ul>
        <li><a class="mainNav" href="#">1</a></li>
        <li><a class="mainNav" href="#">2</a></li>
        <li>
            <a class="mainNav" href="#">3</a>
            <ul>
                <li><a href="#">A</a></li>
                <li><a href="#">B</a></li>
                <li><a href="#">C</a></li>
                <li><a href="#">D</a></li>
            </ul>
        </li>
        <li><a class="mainNav" href="#">4</a></li>
    </ul>
</div> 

$("#content .mainNav").click(function(e) { e.preventDefault(); });

アップデート

あなたの最初の答えは本当に近かった。問題は、すべての子孫li要素を選択していたことでした。これを修正するために、子セレクターを追加しました。

$('#content ul li').has('ul').children('a').click(function(e) {
    /* code to show/hide submenus */

    console.log(e);
    e.preventDefault();
});
于 2011-11-18T22:58:37.147 に答える