1

jquery を使用して最上位の兄弟を選択しようとしています。タスクをより困難にしたクラス名を使用することはできません。

<ul>  
<li>  
    <a href="index.html">1</a>
    <ul>
        <li>  
            <a href="indexsub.html">sub1</a>  
        </li>
        <li>  
            <a href="indexsub2.html">sub2</a>  
        </li>
    </ul>  
</li>  
<li>  
<a href="index2.html">2</a>  
</li>
<li>  
<a href="index3.html">3</a>
</li>
</ul>​   

以下はJSfiddleへのリンクです。

http://jsfiddle.net/KMhzy/28/

子リスト要素 (つまり、sub1 と sub2) を除くすべてのタグの href="#" を変更したいと考えています。

4

5 に答える 5

2

.notとの組み合わせを使用するcontains

$("ul li a").not(":contains('sub1')").attr("href","#");

アップデート

参照

デモ

jQuery.expr[':'].containsAny = function(element, index, match) {
var words = match[3].split(/\s+/);
var text = $(element).text();
var results = $.map(words, function(word) {
    return text === word;
});
return $.inArray(true, results) !== -1;
};

$("ul li a").not(":containsAny(sub1 sub2)").attr("href","#");​
于 2012-10-25T05:35:53.590 に答える
1

まず、HTML を変更する必要があります (ネストされたメニュー内に ul がありません):

<ul>
    <li>
        <a href="index.html">1</a>
        <ul>
            <li>
                <a href="indexsub.html">sub1</a>
            </li>   
        </ul>
    </li>
    <li>
        <a href="index2.html">2</a>
    </li>
    <li>
        <a href="index3.html">3</a>
    </li>
</ul>​

次に、これで目的を達成できます。

$("ul li a").not("ul li li a").attr("href", "#");

(ここで提案されている他の解決策は、いくつかの「sub1」値にハードコードされています。それが必要な場合、これはすべてのサブメニューに対してトリックを行うはずです)。

ここにjsfiddleがあります

于 2012-10-25T05:50:48.897 に答える
1

これを試して:

$('ul li a[href!="indexsub.html"]').attr("href","#");
于 2012-10-25T05:35:00.860 に答える
0

注:はリスト アイテムのみを持つことができ、リスト アイテム内に aまたはタグulを定義せずに別のリスト アイテムを追加することは、間違った構文と見なされます。ulol

W3C 標準に従ってマークアップを修正します。

<ul>  
    <li>  
        <a href="index.html">1</a>
        <ul> 
            <li>  
                <a href="indexsub.html">sub1</a>  
            </li>  
       </ul>  
   </li>
   <li>  
       <a href="index2.html">2</a>  
   </li>
   <li>  
       <a href="index3.html">3</a>
   </li>
 </ul>​ 

また、Pragnesh Chauhanが提案したコードは期待どおりに機能しています。

$("ul li a").not(":contains('sub1')").attr("href","#");

デモを見る

于 2012-10-25T05:41:53.547 に答える
0

これがあなたが望むものです:

$("ul li:first-child a").attr("href","#");

そして同じための jsFiddle: http://jsfiddle.net/KMhzy/43/

PS: 複数の子に対しても機能します... :)

于 2012-10-25T05:59:04.393 に答える