• 第十课:CSS选择器的介绍和区分


    IE7以及以下版本:

    getElementById是不区分表单元素ID与Name的,因此如果有一个表单元素只定义name,并与我们的目标元素ID同名,并且我们的目标元素在它的后面,那么就会选择到那个表单元素。所以一般在定义表单元素时,都会定义跟name一样的id,就是以防其他元素的id跟表单元素的name一样(文档中的id都是唯一的)。

    getElementsByTagName,当参数为"*"通配符时,它会混入注释节点,并且无法选取Object下的元素。

    属性选择器:

    [attr ~= val]  会选择这样的元素:它有属性attr,并且属性的值里面有val。比如:attr = val,attr = val1 val,等都会选择上,一般应用在class属性上。

    举例:

    如果需要根据属性值中的词列表的某个词进行选择,则需要使用波浪号(~)。

    假设您想选择 class 属性中包含 important 的元素,可以用下面这个选择器做到这一点:

    p[class~="important"] {color: red;}

    如果忽略了波浪号,则说明需要完成完全值匹配。

    部分值属性选择器与点号类名记法的区别

    该选择器等价于我们在类选择器中讨论过的点号类名记法。

    也就是说,p.important 和 p[class="important"] 应用到 HTML 文档时是等价的。

    那么,为什么还要有 "~=" 属性选择器呢?因为它能用于任何属性,而不只是 class。

    例如,可以有一个包含大量图像的文档,其中只有一部分是图片。对此,可以使用一个基于 title 文档的部分属性选择器,只选择这些图片:

    img[title~="Figure"] {border: 1px solid gray;}

    这个规则会选择 title 文本包含 "Figure" 的所有图像。没有 title 属性或者 title 属性中不包含 "Figure" 的图像都不会匹配。

    [attr |= val]  会选择这样的元素:它有属性attr,并且属性的值是val或者以"val-"开头。

    举例:

    *[lang|="en"] {color: red;}

    上面这个规则会选择 lang 属性等于 en 或以 en- 开头的所有元素。因此,以下示例标记中的前三个元素将被选中,而不会选择后两个元素:

    <p lang="en">Hello!</p>
    <p lang="en-us">Greetings!</p>
    <p lang="en-au">G'day!</p>
    <p lang="fr">Bonjour!</p>
    <p lang="cy-en">Jrooana!</p>

    一般来说,[att|="val"] 可以用于任何属性及其值。

    假设一个 HTML 文档中有一系列图片,其中每个图片的文件名都形如 figure-1.jpg 和 figure-2.jpg。就可以使用以下选择器匹配所有这些图像:

    img[src|="figure"] {border: 1px solid gray;}

    当然,这种属性选择器最常见的用途还是匹配语言值。

    [attr *= val]  会选择这样的元素:它有属性attr,并且属性的值包含val字样。比如:attr = val,attr= val1 val,attr = chaojidanval等都会选择上。

    关系选择器:

    E+F  选择E元素后面的F元素(同级的,并且紧挨着E)。

    举例:

    如果需要选择紧接在另一个元素后的元素,而且二者有相同的父元素,可以使用相邻兄弟选择器(Adjacent sibling selector)。

    例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:

    h1 + p {margin-top:50px;}

    这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1 和 p 元素拥有共同的父元素”。

    E~F  选择E元素后面的所有F元素(同级的)。

    伪类选择器:

    :link,在IE8-IE10,取:link存在错误,它只能取A标签,而实际上:link指代A,AREA,LINK三种标签,其他浏览器没问题。

    我们还可以通过document.links取链接元素,但是它不包含LINK标签。

    另外,除了Opera,Safari外,其他浏览器取:focus正常。除了Opera,其他浏览器取:hover正确。

    :lang语言伪类。lang虽然是DOM元素的一个属性,但:lang伪类与属性选择器有所不同,举个列子:

    <body  lang="de"><p>dddd</p></body>

    如果使用[lang=de],则只能选择body 元素。但是使用:lang(de),则可以同时选择到body和p元素。

    :root伪类    选择根元素,在HTML文档中通常是html元素。

    :nth-child    匹配属于其父元素的第 N 个子元素,不论元素的类型。如果传入n,n是从0开始的。但是选取元素时,元素的计数是从1开始的。

    比如:

    :nth-child(n)  ,n从0开始,但是0元素没有,所以实际上还是从1开始,相当于   :nth-child(n+1)

    :nth-child(2)   ,选择的就是父元素的第二个子元素,第一个元素用 :nth-child(1) 选择。:nth-child(0)不选择任何元素 。

    如果前面加了p:nth-child(2) ,选择的是父元素的第二个子元素,而且这个子元素必须是p时,才会选中。

    :nth-of-type  选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素.

    比如:

    :nth-of-type(2)   会选择特定类型的第2个子元素。

    它跟:nth-child的区别就是,nth-of-type不仅针对的是子元素而且是特定类型(会根据子元素的tagName分类,每一类再调用nth-child)的子元素,而nth-child只是针对子元素。

    举个例子:

    <h1>这是标题</h1>
    <p>第一个段落。</p>
    <p>第二个段落。</p>
    <p>第三个段落。</p>
    <p>第四个段落。</p>
    <p>第五个段落。</p>

    p:nth-child(odd)           
    {
      background:#ff0000;       
    }
    p:nth-child(even)
    {
      background:#0000ff;
    }

    针对上面的html,由于p元素上面有h1,因此h1是第一项,第一个段落是第二项。这样就会:

    这是标题      p:nth-child(odd)       :nth-child(odd) 选择上了,但因为不是p元素,所以没选择上。

    第一个段落。    p:nth-child(even)      蓝色

    第二个段落。    p:nth-child(odd)       红色

    第三个段落。    p:nth-child(even)  蓝色

    第四个段落。    p:nth-child(odd)       红色

    第五个段落。    p:nth-child(even)  蓝色

    但使用

    p:nth-of-type(odd)
    {
      background:#ff0000;
    }
    p:nth-of-type(even)
    {
      background:#0000ff;
    }

    结果:

    这是标题      h1:nth-of-type(odd)      :nth-of-type(odd)  选择上了,但是不是p元素,所以没选择上。

    第一个段落。    p:nth-of-type(odd)      红色

    第二个段落。    p:nth-of-type(even)     蓝色

    第三个段落。    p:nth-of-type(odd)  红色

    第四个段落。    p:nth-of-type(even)     蓝色

    第五个段落。    p:nth-of-type(odd)  红色

    加油!

  • 相关阅读:
    求一个数字各个位的数字之和
    二进制和十进制的转换 分别用python和js实现
    pymysql 获取插入数据的主键id
    js03.事件
    02.js运算符
    jsonpath
    01.js控制台
    2.命令补充
    hashmap
    正则表达式的补充
  • 原文地址:https://www.cnblogs.com/chaojidan/p/4137695.html
Copyright © 2020-2023  润新知