我正在尝试使用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的链接。
我想更改除子列表元素之外的所有标记的href =“#”(即sub1和sub2)。
答案 0 :(得分:2)
使用.not
和contains
$("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
只能包含列表项,而在列表项中添加另一个列表项而不定义ul
或ol
标记被视为语法错误。
根据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","#");
答案 4 :(得分:0)
这是你想要的:
$("ul li:first-child a").attr("href","#");
和jsFiddle相同:http://jsfiddle.net/KMhzy/43/
PS:它也适用于多个孩子......:)