0

この単純なセレクターの問題に数時間苦労していて、明らかな何かが欠けているに違いありません。いくつ<ul><li>のがネストされたがあり<ul>ます。それぞれ<li>にリンクが含まれており、これをクリックすると(ナビゲートするのではなく)関数を実行したいのですが、重要なのは、これは親に含まれるリンクに対してのみ発生し<ul>、ネストされたに存在する可能性のあるリンクに対しては発生しないこと<ul>です。あなたが思うだろう単純な:

HTML:

<ul>
    <li>
        <a href="dontleavethis.page">A link</a>
        <ul>
            <li><a href="navigate.there">A nested link</a></li>
            <li><a href="navigate.somewhere">Another nested link</a></li>
        </ul>
    </li>
</ul>

jQuery:

$('li:has(ul) a').click(function() { 
    bla bla bla...
    return false;
});

セレクターをどのように表現しても、ネストされたリンクが<ul>クリックハンドラーをトリガーするのを止めることはできません。それらは明らかにセレクターの基準に一致しません":has(ul)"が、ハンドラーは何らかの理由で接続されたままになります。私はここで何が間違っているのですか?

4

5 に答える 5

6
$('li:has(ul) > a').click(...)

あなたの問題は、その中のすべての要素が、直接の子供だけでなく、それを$('li:has(ul) a')意味するということです。 alihasul

于 2009-09-03T14:38:17.647 に答える
1
$('ul > li:has(ul) > a').click(function(){
    bla bla bla....
    return false;
});
于 2009-09-03T14:38:14.090 に答える
0

イベントが伝播された可能性がありますか?

どうですか

$('ul > li:has(ul) > a').click(function(event){
  bla bla bla....
  event.stopPropagation();
  return false;
});
于 2009-09-03T14:44:25.770 に答える
0

トップレベルのリンクにクラスを与えると、複雑な(っぽい)セレクターロジックを必要とせずに、それらに直接アクセスできます。

于 2009-09-03T14:39:48.613 に答える
0

メインのulにIDを指定する必要があります。私は「メイン」を使用しますが、(自分の利益のために)より説明的なものを考えてみてください。その後、あなたはただ使うことができます

$('ul#main > li > a').click(function() { 
    bla bla bla...
    return false;
});

>は、要素の直接の祖先のみを選択します。

-編集-気にしないでください。これは、ulが含まれていないliがスタイルを持つことも意味します。@idrumgoodのソリューションが最適です。

于 2009-09-03T14:39:53.853 に答える