我正在尝试为
元素设置自定义样式HTML:
<ul class="selector">
<li class="selector">some li
<ul class="">
<li>some fancy li - the ul parent should have first class</li>
</ul>
<ul class="">
<li>some more li - the ul parent should have last class</li>
</ul>
</li>
<li class="selector">some second li
<ul class="">
<li>some lonely li - the ul parent should have first and last classes</li>
</ul>
</li>
</ul>
所以我想出了一个希望做到这一点的jQuery
$('ul.selector li.selector > ul').each(function () {
if ($(this).is(':first') && $(this).is(':last')) {
$(this).addClass('first last');
} else if ($(this).is(':first')) {
$(this).addClass('first');
} else if ($(this).is(':last')) {
$(this).addClass('last');
}
});
感谢您的任何建议。
更新 - 根据其中一个答案,您可以玩这个小提琴:http://jsfiddle.net/qAtpe/
答案 0 :(得分:10)
为什么不呢:
$('ul.selector li.selector > ul').each(function() {
$this = $(this); // cache $(this)
if ($this.is(':first')) {
$this.addClass('first');
}
if ($this.is(':last')) {
$this.addClass('last');
}
});
然后使用以下CSS
.first {
//this is first
}
.last {
// this is last
}
.first.last {
// this is first and last - ie the only child
}
$('ul.selector li.selector > ul').each(function() {
$this = $(this); // cache $(this)
if ($this.is(':first-child')) {
$this.addClass('first');
}
if ($this.is(':last-child')) {
$this.addClass('last');
}
});
查看您的示例jsfiddle - 您需要选择器:first-child
而不是:first
..
:第一个伪类相当于:eq(0)。它也可以写成:lt(1)。虽然这只匹配一个元素,但是:first-child可以匹配多个:每个父元素一个。
这现在有效:
答案 1 :(得分:1)
检查元素是否有兄弟姐妹,否则它是唯一的孩子:
$('ul.selector li.selector > ul').each(function() {
if ($(this).siblings().length===0)) {
$(this).addClass('only');
} else if ($(this).is(':first') ) {
$(this).addClass('first');
} else if ($(this).is(':last') ) {
$(this).addClass('last');
}
});
答案 2 :(得分:1)
我不确定这是否能回答你的问题,但你可以使用下面的选择器选择单独的LI元素,而不是在另一个LI之前/之后:
$('ul:first-child:last-child')
答案 3 :(得分:0)
只有一种情况
如果孩子是第一个和最后一个,那么它将是一个人,所以使用
$('ul.selector li.selector > ul').children().length ==1
孩子的数量是1。
并且不要使用:首先它在IE中不起作用
答案 4 :(得分:0)
你应该试试这个。
$('ul.selector li.selector > ul').each(function() {
$this = $(this);
if ( $this.is(':first') && $this.is(':last') ) {
$this.addClass('first last');
} else {
if ($this.is(':first')) {
$this.addClass('first');
}
if ($this.is(':last')) {
$this.addClass('last');
}
}
});
答案 5 :(得分:0)
检查这个小提琴:http://jsfiddle.net/KCAZQ/。如果只有一个元素,我认为它们也会覆盖它。
<ul>
<li>first</li>
<li>second</li>
<li>thrid</li>
<li>fourth</li>
</ul>
$('ul').find('li').first().css('color','green');
$('ul').find('li').last().css('color','green');
答案 6 :(得分:0)
我在寻找同样的问题时遇到了同样的问题,试图让我的面包屑中的最后li > a
不是第一个li
。这就是我解决它的方法:
$(".breadcrumb > li:gt(0):last > a")