选择顶级兄弟姐妹而不为其分配课程

时间:2012-10-25 05:29:41

标签: jquery jquery-selectors siblings

我正在尝试使用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/

我想更改除子列表元素之外的所有标记的href =“#”(即sub1和sub2)。

5 个答案:

答案 0 :(得分:2)

使用.notcontains

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

<强>更新

<强> reference

<强> Demo

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","#");​

答案 1 :(得分:1)

试试这个:

$('ul li a[href!="indexsub.html"]').attr("href","#");

答案 2 :(得分: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

答案 3 :(得分:0)

注意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","#");

SEE DEMO

答案 4 :(得分:0)

这是你想要的:

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

和jsFiddle相同:http://jsfiddle.net/KMhzy/43/

PS:它也适用于多个孩子......:)