将attr应用到第一级

时间:2013-03-27 22:59:51

标签: javascript jquery

<li class="page_item"><a href="javascript:">A</a>
<ul class="children">
    <li class="page_item"><a href="">1</a></li>
    <li class="page_item"><a href="">2</a></li>
</ul>
</li>
<li class="page_item "><a href="">B</a>
<ul class="children">
    <li class="page_item"><a href="">1</a></li>
    <li class="page_item"><a href="">2</a></li>
    <li class="page_item"><a href="">3</a></li>
    <li class="page_item"><a href="">4</a></li>
</ul>
</li>

<li class="page_item "><a href="">C</a>
<ul class="children">
    <li class="page_item"><a href="">1</a></li>
    <li class="page_item"><a href="">2</a></li>
    <li class="page_item"><a href="">3</a></li>
    <li class="page_item"><a href="">4</a></li>
</ul>

如何更改所有<li class="page_item"><a href="javascript:"></a>的attr但不更改ul.children。

$('li.page_item a').not("ul.children").attr("href", "http://google.com");

不工作。感谢

7 个答案:

答案 0 :(得分:5)

将顶级ul设为parent类,然后设置:

$('ul.parent > li.page_item > a').attr("href", "http://google.com");

DEMO HERE

答案 1 :(得分:4)

简而言之:$("ul:not(.children) > li.page_item > a").attr("href","blah");:not jQuery伪选择器允许您从集合(ul)中过滤掉您不想要的东西(ul.children)。从那里,直接孩子李,直接孩子一个。

希望这有帮助。如果仍然不清楚,请不要犹豫,我会进一步详细说明。

P.S:小提琴 - http://jsfiddle.net/VsL5t/

答案 2 :(得分:2)

$('li.page_item a').not('.children a').attr("href", "http://google.com");

编辑 - 或更具体的过滤(尽管上面填写了答案的要求):

$('li.page_item a').not('ul.children li.page_item a').attr("href", "http://google.com");

答案 3 :(得分:1)

遍历元素并跳过没有.children的元素。

<强> jsFiddle Demo

$('li.page_item a').each(function(){
 if( $('.children',this.parentNode).length == 0 ) return true;
 $(this).attr("href","http://www.google.com");
});

答案 4 :(得分:1)

一种选择是使用has方法。

$('li.page_item')
         .has("ul.children")
         .children('a')
         .prop("href", "http://google.com");

答案 5 :(得分:0)

你的尝试很接近。 not调用中的选择器将不匹配任何内容,因为集合包含a元素,并且选择器与ul元素匹配。将a添加到选择器:

$('li.page_item a').not("ul.children a").attr("href", "http://google.com");

答案 6 :(得分:-2)

使用直接后代选择器:

$('li.page_item > a').attr("href", "http://google.com");