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

试试这个:

$('ul li a[href!="indexsub.html"]').attr("href","#");
于 2012-10-25T05:35:00.860 回答
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 回答
0

注意: Aul只能有列表项,并且在列表项中添加另一个列表项而不定义 aulol标记被认为是错误的语法。

根据 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 回答