我想使用 CSS 选择至少有 N 个子节点的节点。如何?
目的是在树中应用色带(“指南”),但前提是父节点下方有六个或更多节点。
我得到的 JS、JQuery 和服务器端脚本建议有些问题,因为大多数子项是使用 Ajax 调用动态加载的。我必须破解注入孩子的代码,以便能够为那些有 6 个以上孩子的父母添加一个班级。这就是为什么在我努力编写代码之前,我想问是否有一种纯 CSS 方法可以做到这一点。不管孩子人数多少,我都可能只是满足于绑扎——虽然不够整洁,但足够公平。
我想使用 CSS 选择至少有 N 个子节点的节点。如何?
目的是在树中应用色带(“指南”),但前提是父节点下方有六个或更多节点。
我得到的 JS、JQuery 和服务器端脚本建议有些问题,因为大多数子项是使用 Ajax 调用动态加载的。我必须破解注入孩子的代码,以便能够为那些有 6 个以上孩子的父母添加一个班级。这就是为什么在我努力编写代码之前,我想问是否有一种纯 CSS 方法可以做到这一点。不管孩子人数多少,我都可能只是满足于绑扎——虽然不够整洁,但足够公平。
我建议使用 jQuery if 语句来计算节点,然后添加一个类来应用你想要的样式。
这是一个工作示例:http: //jsfiddle.net/WarrenBee/YeJyy/5
$(document).ready(function() {
var nodeCount = $('.node').length;
if( nodeCount > 6 ) {
$('.node').addClass('nodeStyles');
}
});
好吧,css3 有一些可以完成这项工作的子选择器。
li:first-child:nth-last-child(6),
li:first-child:nth-last-child(6) ~ li {
... some style
}
这个解决方案的功劳归功于发现它的 André Luís。当然它不适用于父元素,因为那是 css4 并且还不支持。li
但是如果有 6 个标签,或者只是第一个标签,您可以设置所有标签的样式li
。
结合 before 伪元素,您可以在视觉上制作父样式。ul 得到的position:relative
. 然后你可以用伪元素在父级上伪造样式:
li:first-child:nth-last-child(6):before {
content:'';
position:absolute;
top:0;
left:0;
z-index:-1;
width:400px;
height:20px;
background:green
}
并非每个浏览器都支持 css 选择器 nth-last-child,但对于 Internet Explorer,您可以使用 javascript 或 IE7.js。祝你好运。
这在严格意义上是不可能的,因为 CSS 没有提供任何基于子级属性选择父级的方法。
对于严格的 CSS 解决方案,我会向父元素添加一个类,并设置该类的样式。您可以在服务器端以编程方式处理它,而不是在必要时手动添加类。
您当然可以使用 JavaScript 来完成此操作,并且许多可用的 JavaScript 库将简化该过程。
但是,您可以使用 JavaScript 来执行此操作。以下是一个jQuery示例(小提琴):
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
JavaScript:
jQuery(function($){
$('ul').each(function(){
if($(this).children('li').length >= 6){
$(this).css('background-color', 'orange');
}
});
});