如何选择first-child不是表格的所有div元素

时间:2011-11-03 13:09:10

标签: css

在我的HTML中有很多元素。一些div元素有一个表作为子元素。我想为所有div元素设置一些css属性,但是那些带有table和没有它的那些属性不同。

我的第一个方法:

包含表的div元素的class属性设置为'table',因此我可以使用属性选择器选择它们,如下所述:http://www.w3.org/TR/selectors/#attribute-selectors

div[class*="Table"]
{ 
/* Set Properties for all div with 'table' inside class-attribute */
}

不幸的是,似乎没有相反的属性选择器。

所以我的第一个问题是:这是对的还是我能做什么?

我的下一个方法是,检查一个孩子是否是一张桌子。在谷歌的帮助下,我只能找到如何选择,例如元素的第一个子元素,但不是如何检查,如果它是一个表格。

所以我的问题2和3是:我如何选择那些包含(或不包含)作为孩子的表格的div元素?

编辑:通常表格是第一个孩子,但如果可能,我想检查所有子元素是否为表格

2 个答案:

答案 0 :(得分:2)

无法使用CSS(2.1或3)定位父元素。您可以做的最好的事情是手动将类添加到您要定位的所有div标记,或使用JavaScript编写您的选择标准。

如果您使用JavaScript来执行此操作,您可以使用jQuery轻松完成此操作:

$('div > :first-child').not('table').parent().addClass('notables');

Working demo

修改评论:如果您要选择没有嵌套任何表的div,可以使用以下jQuery :has()选择器:< / p>

$('div:not(:has(table))').addClass('notables');

Working demo 2

答案 1 :(得分:1)

将类添加到包含表的<div>的方法是使用CSS执行此操作的唯一方法。

如果这有助于此方法,则有the :not() selector。它不受IE 8及以下版本以及Opera 9及以下版本的支持,但所有其他浏览器都支持它。

通过为<div>设置不包含div选择器的表的样式,然后使用表类覆盖<div> s的样式,可以获得相同的效果,但:not()可能会减少冗长。在这里演示:http://jsfiddle.net/LyLS5/