为什么不用表> tr>使用子选择器时td工作?

时间:2011-04-06 15:24:10

标签: html css css-selectors

我无法理解为什么以下选择器按预期工作(即获取td):

table tr td

但这个没有:

table > tr > td

tdtr的后代,后者又是table的后代,但他们也是彼此的孩子。因此,我认为>选择器也可以。

我做了两个小提琴:

  1. 孩子:http://jsfiddle.net/brLee/
  2. 后裔:http://jsfiddle.net/brLee/1/
  3. 为什么>选择器不在这里工作?

2 个答案:

答案 0 :(得分:78)

在HTML中,浏览器隐式添加tbody元素,其中包含tr元素 1 ,因此实际上tr永远不会是table

因此,您必须改为:

table > tbody > tr > td

当然,如果您自己添加tbody元素,则使用相同的选择器。 spec解释了何时隐式添加tbody

  

标签省略

     

如果tbody元素中的第一个元素是tbody元素,并且该元素之前没有tr,则可以省略tbody thead元素的开始标记},或tfoot元素,其结尾标记已被省略。


1 对于正确提供application/xhtml+xml的XHTML文档,情况并非如此,given its XML roots

答案 1 :(得分:1)

如果你想要比教皇更加天主教徒:)这就是我做的事情(因为以上都没有对我有用):

1)创建一个css类,将其分配给GridView的属性(例如:

<PagerStyle CssClass="pagerNoBorder" /> 

2)定义css类,就像浏览器呈现页码一样(检查浏览器中的元素并查找所有子选择器!)。就我而言,情况就是这样:

.pagerNoBorder > td > table > tbody > tr > td
    {
        border-width:0px !important;
        border-style:none;
    }

如果你要在同一时间说出为什么边界宽度(+!重要)和边框式,那么请再次阅读我的答案的介绍:)。干杯和美好的一天!