Jquery nth-child 获取意外元素

Jquery nth-child getting unexpected elements

在使用 JQuery 的 nth-child 时遇到一些问题,希望有人能发现我的错误。

我的HTML有点像这样

<div class="suggestedContentAmountRow" style="width: 32%; margin-right: 1%; float: left; display: none;">
<div class="suggestedContentAmountRow" style="width: 32%; margin-right: 1%; float: left; display: none;">
<div class="suggestedContentAmountRow" style="width: 32%; margin-right: 1%; float: left; display: none;">
<div class="suggestedContentAmountRow" style="width: 32%; margin-right: 1%; float: left; display: none;">
<div class="suggestedContentAmountRow" style="width: 32%; margin-right: 1%; float: left; display: none;">
<div class="suggestedContentAmountRow" style="width: 32%; margin-right: 1%; float: left; display: none;">
<div class="suggestedContentAmountRowMonthly" style="width: 32%; margin-right: 1%; float: left; display: block;">
<div class="suggestedContentAmountRowMonthly" style="width: 32%; margin-right: 1%; float: left; display: block;">
<div class="suggestedContentAmountRowMonthly" style="width: 32%; margin-right: 1%; float: left; display: block;">
<div class="suggestedContentAmountRowMonthly" style="width: 32%; margin-right: 1%; float: left; display: block;">
<div class="suggestedContentAmountRowMonthly" style="width: 32%; margin-right: 1%; float: left; display: block;">
<div class="suggestedContentAmountRowMonthly" style="width: 32%; margin-right: 1%; float: left; display: block;">

我想做的是每第 4 个元素添加 css clear: left.

如果我这样做

$('.suggestedContentAmountRow:nth-child(4n)').css({"clear": "left"});
$('.suggestedContentAmountRowMonthly:nth-child(4n)').css({"clear": "left"});    

suggestedContentAmountRow 工作正常。对于 suggestedContentAmountRowMonthly,虽然它正在选择第二个和第六个元素(看起来只是从 suggestedContentAmountRow 停止的地方开始计算第四个元素)。那么我应该使用什么来代替 nth-child?

编辑:虽然这次每个 class 有 6 个元素,但有时会更多。通常不想要第 4 个元素,因为 9 我会想要第 4 个和第 7 个元素,或者有时可能每个第 2 个元素都想要,所以 eq 不起作用。

你不能。 CSS 中的子元素从父元素开始计算。因此,您如何定义类名并不重要。使用 css 实现此目的的方法是将第二组元素包装到父元素中。

使用 jQuery 是的,你可以,但不能使用具有我在第一段中告诉你的行为的 CSS 选择器。你可以这样做:

$('.suggestedContentAmountRowMonthly').get(4)

小心,因为它 return 是一个 DOM 对象而不是 jQuery 对象。你可以 jqueryfy 像这样:

var DOMobj = $('.suggestedContentAmountRowMonthly').get(4);
var jQueryObj = $(DOMobj);

祝你好运

编辑

正如 Rycochet 在评论中所说,您可以使用 eq() 函数直接 return 一个 jquery 对象:

$('.suggestedContentAmountRowMonthly').eq(4).css({clear:'left'});

css 目前还没有办法做到这一点,尽管它会在未来的某个时候实现...

这么说,在一小块jQuery-

中是可以的
$('.suggestedContentAmountRow').filter(function(i) {
    return !(i % 4);
}).css({"clear": "left"});
$('.suggestedContentAmountRowMonthly').filter(function(i) {
    return !(i % 4);
}).css({"clear": "left"});

使用过滤方法只让模数为4的(即除以4没有余数)通过。您不能将它们都放在一个选择器中,因为它是需要过滤的选择器的结果,并且它会给出与 css.

相同的错误结果。

-- 编辑

作为一个小小的"improvement",你可以把它做成一个更简单的单一方法-

$.fn.every4th = function() {
    return this.filter(function(i) {
        return !(i % 4);
    });
};

$('.suggestedContentAmountRow').every4th().css({"clear": "left"});
$('.suggestedContentAmountRowMonthly').every4th().css({"clear": "left"});