第 n 种类型无法根据需要工作
nth-of-type not working as needed
>我正在做响应式网站。我的 HTML 代码如下所示:
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
CSS 是这样的:
.column-5{width:18.4%; margin-right:2%;}
.column-5:last-child{margin-right:0;}
和我的 JS 喜欢
$('.column_5:nth-of-type(5n+5)').addClass('last-child')
上述代码当前生成的输出如下:
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5 last-child">...</div>
<div class="column-5">...</div>
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5 last-child">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5 last-child">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
但是,我期望/需要的是以下内容。实际上,我需要将 last-child
类添加到每 5 个连续元素中,column-5
类。
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5 last-child">...</div>
<div class="column-5">...</div>
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5 last-child">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5 last-child">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
我怎样才能做到这一点?
我所知,这不能用纯CSS完成,因为当两者之间有不同的元素时nth-of-type
选择器不会重置计数器。另请注意,nth-of-type
主要作用于元素类型,而不适用于附加到它的类选择器。
您当前的选择器(.column_5:nth-of-type(5n+5)
(将选择每种类型的第5个元素,该元素也恰好具有class='column_5'
(。它将适用于所有类型的元素(也就是说,它将在第 5 个h2
、第 5 个div
、第 5 个span
中选择所有元素,只要它们具有所需的类(。HTML 中的选择器和类之间也存在不匹配,但我认为这是一个错字。
你最好的选择是使用 JavaScript/jQuery 来实现这一点,下面是一个使用 JavaScript 的示例方法(我假设你对 JS 答案没问题,因为它被标记为有问题(。
代码几乎是不言自明的,但我添加了一些内联注释以更好地理解。它将类应用于具有所需类的每个第 5 个元素(无论元素类型如何(。
window.onload = function() {
var j = 0;
var els = document.querySelectorAll('body *'); // Selecting all elements under parent but you can replace body with the required parent.
for (i = 0; i < els.length; i++) { // loop through all elements
if (els[i].className.indexOf('column-5') != -1) { // if element has class
j = j + 1; // increment counter
if (j % 5 == 0) // if counter = 5 or its multiple
els[i].className += ' last-child'; //add class
} else { // if element does not have class
j = 0; // reset counter.
}
}
}
.last-child {
background: red;
}
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
对评论的回应:
- 在您的情况下,每个具有类的
section
元素也有一个子img
元素,因此当我们使用像#id *
(后代选择器(这样的选择器时,它会选择并遍历父级下的所有元素(无论它们是子元素、孙子元素等(。因此,当遇到img
标记时,计数器j
将重置。若要避免这种情况,请使用以下行仅选择直接子元素:var els = document.querySelectorAll('.container > *');
- In the fiddle, I have selected the onDomReady option in Frameworks & Extensions (sidebar). In your real code, you could either put this piece of code in a
script
tag just before the closing body tag (</body>
) or if it is in a external script file, reference it at the same place (just before</body>
).
Updated Fiddle
Harry's answer is good. I also have an idea where we can still use nth-child concept. Wrap the blocks with another element. Like this:
<div class="blocks">
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
</div>
<div class="blocks">
<h2>Title</h2>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
<div class="column-5">...</div>
</div>
现在你可以使用类似".blocks .column-5:nth-of-type(5n+5('(.addClass('last-child'("。这意味着 .blocks 的子项将被计算在内,5n+5 在每个块中都可以正常工作。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作