玩转jQuery基本/层次/过滤/表单选择器?

对比选择:

1. CSS依靠CSS选择器使得网页的结构和表现样式完全分离,CSS选择器能轻松定位并修改指定元素样式,CSS选择器包括标签选择器(以文档元素作为选择器),ID选择器(以文档元素的唯一标识ID作为选择器),类选择器(以文档元素的class作为选择器),群组选择器(多个选择器应用同样的样式规则),后代选择器(元素X的任意后代元素Y),通配选择器(以文档的所有元素作为选择器),伪类选择器(以元素特定行为作为选择器),子选择器(元素X的直接子属元素Y),兄弟选择器(元素X的直属兄弟元素Y),属性选择器(以文档元素特定属性为选择器),详情参考(http://www.w3school.com.cn/css/css_selector_type.asp)

2. jQuery选择器完全继承了CSS选择器的风格,CSS选择器能轻松定位并修改指定元素属性和行为,而无需担心浏览器是否支持这一选择器,jQuery的行为规则都必须在获取到元素后才能生效

说明: jQuery不仅可以像原生CSS样修改元素样式,而且还可以修改元素行为,需要注意的是jQuery中涉及操作CSS样式的部分比单纯的CSS功能更为强大,并且拥有跨浏览器的兼容性.

 

错误处理:

说明: 原生JS如果返回的对象不存在则浏览器会报错,如果加if判断会增加代码量,而jQuery中$('selector')返回的永远是封装后的jQuery对象,因此不能直接if判断,也不需要if判断,如果非要去判断的话可通过判断$('selector').length属性是否大于0或$('selector')[0]转换为DOM对象(其实是调用的$('selector').toArray()转换为DOM对象数组然后再取指定DOM对象的)判断对象是否存在

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<!DOCTYPE html>

<html lang="zh-cn">

    <head>

        <meta charset="UTF-8">

        <title>前端开发</title>

    </head>

    <body>

    </body>

    <script src="js/libs/jquery.min.js"></script>

    <script type="text/javascript">

        // 方式一: 通过判断其length属性

        if ($("body").length > 0){

            alert("存在")

        

        // 方式二: 转换为DOM对象判断是否存在

        if ($('body')[0]){

            alert("存在")

        }

    </script>

</html>

 

JQ选择器:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

<!DOCTYPE html>

<html lang="zh-cn">

    <head>

        <meta charset="UTF-8">

        <title>前端开发</title>

        <style type="text/css">

            div, span, p {

                width: 200px;

                height: 200px;

                margin: 5px;

                background: #aaa;

                border: #000 1px solid;

                float: left;

                font-size: 17px;

            }

            div.mini {

                width: 66px;

                height: 66px;

                background-color: #aaa;

                font-size: 12px;

            }

            div.hide {

                display: none;

            }

        </style>

    </head>

    <body>

        <h1>just for test</h1>

        <div class="one" id="one">

            id为one,class为one的div

            <div class="mini">class为mini的div</div>

        </div>

        <div class="one" id="two" title="test">

            id为two,class为one,title为test的div

            <div class="mini" title="other">class为mini,title为other的div</div>

            <div class="mini" title="test">class为mini,title为test的div</div>

        </div>

        <div class="one">

            class为one的div

            <div class="mini">class为mini的div</div>

            <div class="mini">class为mini的div</div>

            <div class="mini">class为mini的div</div>

            <div class="mini"></div>

        </div>

        <div class="one">

            class为one的div

            <div class="mini">class为mini的div</div>

            <div class="mini">class为mini的div</div>

            <div class="mini">class为mini的div</div>

            <div class="mini" title="test">class为mini,title为test的div</div>

        </div>

        <div style="display: none;" class="one">style的display为"none"的div</div>

        <div class="hide">class为"hide"的div</div>

        <div>

            包含input的type为"hidden"的div 

            <input type="hidden" name="name">

        </div>

        <span id="mover">正在执行动画的span</span>

    </body>

</html>

wKioL1guouSwbdkOAABXtDZViN4400.png

# 基本选择器

说明:  基本选择器包括元素选择器/ID选择器/类选择器/通用选择器/分组选择器.

1

2

3

4

5

6

7

8

9

10

11

12

13

<script src="js/libs/jquery.min.js"></script>

<script type="text/javascript">

    // 改变id为one的元素背景颜色为#bbffaa

    $("#one").css("background-color", "#bbffaa")

    // 改变class为mini的元素的背景颜色为#bbffaa

    $(".mini").css("background-color", "#bbffaa")

    // 改变所有div元素的背景颜色为#bbffaa

    $("div").css("background-color", "#bbffaa")

    // 改变所有元素的背景颜色为#bbffaa

    $("*").css("background-color", "#bbffaa")

    // 改变所有span和id为two的元素的背景颜色为#bbffaa

    $("span, #two").css("background-color", "#bbffaa")

</script>

# 层次选择器

说明: 层次选择器包括子选择器/后代选择器/兄弟选择器/后续选择器.

1

2

3

4

5

6

7

8

9

10

<script type="text/javascript">

    // 改变body里面所有div元素的背景颜色为#bbffaa

    $("body div").css("background-color", "#bbffaa")

    // 改变body内第一层同级div元素的背景颜色为#bbffaa

    $("body>div").css("background-color", "#bbffaa")

    // 改变class为one的后面第一个同级div的背景颜色为#bbffaa

    $(".one + div").css("background-color", "#bbffaa")

    // 改变id为two后面所有div元素的背景颜色为#bbffaa

    $("#two ~ div").css("background-color", "#bbffaa")

</script>

扩展: 在层次选择器中子选择器和后代选择器比较常用,而兄弟选择器和后续选择器在jQuery中可以用更简单的方法代替,兄弟选择器可通过.next("selector")代替,而后续选择器可通过.nextAll("selector")代替,需要注意的是.next("selector")和.nextAll("selector")都是基于同级的,还有一个基于同级但是不论前后的兄弟元素获取方法是.siblings("selector")

# 过滤选择器

说明: 过滤选择器包括基本过滤选择器/内容过滤选择器/可见性过滤选择器/属性过滤选择器/子元素过滤选择器/表单属性过滤选择器.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

<script type="text/javascript">

    // 基本过滤选择器

    // 改变第一个div元素的背景色为#bbffaa

    $("div:first").css("background-color", "#bbffaa")

    // 改变最后一个div元素的背景色为#bbffaa

    $("div:last").css("background-color", "#bbffaa")

    // 改变class不为one的元素的背景色为#bbffaa

    $("div:not(.one)").css("background-color", "#bbffaa")

    // 改变索引为偶数的元素的背景颜色为#bbffaa

    $("div:even").css("background-color", "#bbffaa")

    // 改变索引为奇数的元素的背景颜色为#bbffaa

    $("div:odd").css("background-color", "#bbffaa")

    // 改变索引等于某值元素的背景颜色为#bbffaa

    $("div:eq(0)").css("background-color", "#bbffaa")

    // 改变索引大于某值的元素的背景颜色为#bbffaa

    $("div:gt(0)").css("background-color", "#bbffaa")

    // 改变索引小于某值的元素的背景颜色为#bbffaa

    $("div:lt(1)").css("background-color", "#bbffaa")

    // 改变所有的标题元素(h1~h6)的背景颜色为#bbffaa

    $(":header").css("background-color", "#bbffaa")

    // 改变所有正在执行动画的元素的背景颜色为#bbffaa

    $(":animated").css("background-color", "#bbffaa")

     

    // 内容过滤选择器

    // 设置包含文本内容为某值的元素背景色为#bbffaa

    $("div:contains(为)").css("background-color", "#bbffaa")

    // 设置不包含任何子元素或文本内容的元素背景色为#bbffaa

    $("div:empty").css("background-color", "#bbffaa")

    // 设置包含指定选择器的元素的元素背景色为#bbffaa

    $("div:has(div)").css("background-color", "#bbffaa")

    // 设置包含有子元素或文本的元素的背景色为#bbffaa(和empty相反)

    $("div:parent").css("background-color", "#bbffaa")

     

    // 可见过滤选择器

    // 设置所有不可见元素显示

    $("div:hidden").show(3000)

    // 设置所有可见div元素背景色设置为#bbffaa

    $("div:visible").css("background-color", "#bbffaa")

     

    // 属性过滤选择器

    // 设置含有title属性元素的背景色为#bbffaa

    $("[title]").css("background-color", "#bbffaa")

    // 设置title属性值等于test的元素背景色为#bbffaa

    // $("[title=test]").css("background-color", "#bbffaa")

    // 设置title属性值不等于test的元素背景色为#bbffaa

    $("[title!=test]").css("background-color", "#bbffaa")

    // 设置title属性值以te开头的元素背景色为#bbffaa

    $("[title^=te]").css("background-color", "#bbffaa")

    // 设置title属性值以st结尾的元素背景色为#bbffaa

    $("[title$=st]").css("background-color", "#bbffaa")

    // 设置title属性值中含有es的元素背景色为#bbffaa

    $("[title*=es]").css("background-color", "#bbffaa")

    // 设置包含id属性且title属性值为test的元素的背景色为"#bbffaa"

    $("[id][title=test]").css("background-color", "#bbffaaa")

     

    // 子元素过滤选择器

    // 设置class为one的div下的第一个子元素背景色为#bbffaa

    $("div.one :first-child").css("background-color", "#bbffaa")

    // 设置class为one的div下的最后一个子元素背景色为#bbffaa

    $("div.one :last-child").css("background-color", "#bbffaa")

    // 设置class为one的div下只有一个子元素的元素背景色为#bbffaa

    $("div.one :only-child").css("background-color", "#bbffaa")

    // 设置每个元素下的第index个子元素或偶数或奇数元素的背景色为#bbffaa

    $("div.one :nth-child(odd)").css("background-color", "#bbffaa")

</script>

说明: 在可见性过滤选择器中,:hidden不仅包括样式属性display:none的元素,也包括文本隐藏域<input type="hidden">和visible:hidden之类的元素,在子元素过滤选择器中,:nth-child将为每一个符合条件的父元素匹配子元素,但需要注意的是索引是从1开始,而:eq的索引从0开始,同理:first和:first-child,:last和:last-child类似

# 表单选择器

说明: 表单选择器包括表单对象属性过滤选择器和扩展表单过滤选择器.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

<script type="text/javascript">

    // 表单对象属性过滤选择器

    // 设置id为form1的表单下的可用元素的值为你改变了~

    $("#form1 input:enabled").val("你改变了~")

    // 设置id为form1的表单下的不可用元素的值为你改变了~

    $("#form1 input:disabled").val("你改变了~")

    // 获取多选框中选中的个数并显示在div中

    $("div:first").html($("input:checked").length + "个被选中!").css({

        "color": "red",

        "font-weight": "border"

    })

    // 获取多选下拉列表中被选中的个数并显示在div中

    $("div:eq(1)").html($("select:first [selected=selected]").length + "个被选中").css({

        "color": "red",

        "font-weight": "border"

    })

    // 获取单选下拉框中被选中的值并显示在div中

    $("div:last").html($("select:last [selected=selected]").text() + "被选中").css({

        "color": "red",

        "font-weight": "border"

    })

    // 表单选择器

    // :input可匹配<input>/<textarea>/<select>/<button>元素

    $(":input").css("border", "solid 1px red")

    // :text可匹配<input>所有的单行文本框

    $(":text").css("border", "solid 1px red")

    // :password可匹配所有的密码框

    $(":password").css("border", "solid 1px red")

    // :radio可匹配所有的单选框

    $(":radio").css("border", "solid 1px red")

    // :checkbox可匹配所有的多选框

    $(":checkbox").css("border", "solid 1px red")

    // :submit可匹配所有的提交按钮

    $(":submit").css("border", "solid 1px red")

    // :image可匹配所有的图像按钮

    $(":image").css("border", "solid 1px red")

    // :reset可匹配所有的重置按钮

    $(":reset").css("border", "solid 1px red")

    // :button可匹配所有的按钮

    $(":button").css("border", "solid 1px red")

    // :file可匹配所有的文件上传域

    $(":file").css("border", "solid 1px red")

    // :hidden选取所有不可见元素

    $(":hidden").css("border", "solid 1px red")

</script>

 

最佳实践:

1. 给网页中的所有的<p>元素添加点击事件,点击后弹出元素内的文本内容?

1

2

3

4

5

<script type="text/javascript">

    $("p").click(function(event) {

        alert($(this).text())

    });

</script>

2. 使一个特定的表格隔行换色?

1

2

3

<script type="text/javascript">

    $("table tr:odd").css("background-color", "#bbffaa")

</script>

3. 对多选框进行操作,输出选中的个数?

1

2

3

4

5

6

7

<script type="text/javascript">

    $("input[name=newselector]:checkbox").click(function(event){

        $("div>span").html(

            " " + $("input[name=newselector]:checked").length + "个选项被勾选!"

        ).css("color", "red")

    })

</script>

4. 如上要求用户进入页面时,品牌列表默认精简显示(从第5条开始隐藏后面的品牌,除了最后一条),用户单机"显示所有品牌"显示全部品牌同时高亮显示推荐的品牌,且按钮里的文字也换成"精简显示品牌",再次单击"精简显示品牌"恢复初始状态?

wKiom1guoy2xL8QXAAAXQa0JE1I482.png

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

<!DOCTYPE html>

<html lang="zh-cn">

    <head>

        <meta charset="UTF-8">

        <title>前端开发</title>

        <style type="text/css">

            *{ margin:0; padding:0;}

            body {font-size:12px;text-align:center;}

            a { color:#04D; text-decoration:none;}

            a:hover { color:#F50; text-decoration:underline;}

            .SubCategoryBox {width:600px; margin:0 auto; text-align:center;margin-top:40px;}

            .SubCategoryBox ul { list-style:none;}

            .SubCategoryBox ul li { display:block; float:left; width:200px; line-height:20px;}

            .showmore { clear:both; text-align:center;padding-top:10px;}

            .showmore a { display:block; width:120px; margin:0 auto; line-height:24px; border:1px solid #AAA;}

            .showmore a span { padding-left:15px; background:url(img/down.gif) no-repeat 0 0;}

            .promoted a { color:#F50;}

        </style>

    </head>

    <body>

        <div class="SubCategoryBox">

            <ul>

                <li ><a href="#">佳能</a><i>(30440) </i></li>

                <li ><a href="#">索尼</a><i>(27220) </i></li>

                <li ><a href="#">三星</a><i>(20808) </i></li>

                <li ><a href="#">尼康</a><i>(17821) </i></li>

                <li ><a href="#">松下</a><i>(12289) </i></li>

                <li ><a href="#">卡西欧</a><i>(8242) </i></li>

                <li ><a href="#">富士</a><i>(14894) </i></li>

                <li ><a href="#">柯达</a><i>(9520) </i></li>

                <li ><a href="#">宾得</a><i>(2195) </i></li>

                <li ><a href="#">理光</a><i>(4114) </i></li>

                <li ><a href="#">奥林巴斯</a><i>(12205) </i></li>

                <li ><a href="#">明基</a><i>(1466) </i></li>

                <li ><a href="#">爱国者</a><i>(3091) </i></li>

                <li ><a href="#">其它品牌相机</a><i>(7275) </i></li>

            </ul>

            <div class="showmore">

                <a href="more.html"><span>显示全部品牌</span></a>

            </div>

        </div>

    </body>

    <script src="js/libs/jquery.min.js"></script>

    <script type="text/javascript">

        /*

        1. 默认进去页面,从第5条开始隐藏后面的品牌(最后一条"其它品牌相机"除外)

        2. 当用户点击"显示全部品牌"按钮时

            > 显示隐藏品牌

            > "显示全部品牌"按钮文本切换成"精简显示品牌"

            > 高亮推荐品牌

        3. 当用户点击"精简显示品牌"按钮时

            > 从第5条开始隐藏后面的品牌(最后一条"其它品牌相机"除外)

            > "精简显示品牌"按钮文本切换成"显示全部品牌"

            > 去掉高亮显示的推荐品牌

         */ 

        $(function(){

            var $moreItems = $(".SubCategoryBox>ul>li:gt(5):not(:last)")

            var $moreBtn = $(".showmore>a")

            var $highlightItmes = $("ul>li").filter(":contains(佳能),:contains(索尼)")

            $moreItems.hide()

            $moreBtn.toggle(function(){

                $moreItems.show()

                $(".showmore>a>span").css("background", "url(img/up.gif) no-repeat 0 0").text("精简显示品牌")

                $highlightItmes.addClass("promoted")

            }, function(){

                $moreItems.hide()

                $(".showmore>a>span").css("background", "url(img/down.gif) no-repeat 0 0").text("显示所有品牌")

                $highlightItmes.removeClass("promoted")

            })

        })

    </script>

</html>

方法说明
.show(speed,callback)显示隐藏的匹配元素,支持设置显示速度以及回调函数
.css(name)获取所有匹配元素的样式
.css(name, value)设置所有匹配元素的单个样式
.css(name,function(index,value))设置所有匹配元素的单个样式,index为选择器index的位置,value为当前样式值
.css({k: v, k: v})设置所有匹配元素的多个样式
.filter(selector)以单个过滤器过滤对应的集合
.filter(expr)以多个过滤器过滤对应的集合,过滤器之间使用,隔开
.filter(func)以函数过滤对应的集合,函数接收选择器index的值
.addClass(class)为指定元素添加class
.removeClass(class)为指定元素删除class
.toggle(func1,func2, func3....)用于绑定两个或多个事件处理函数,以响应被选元素的轮流的.click事件

 

 

登录乐搏学院官网http://www.learnbo.com/

或关注我们的官方微博微信,还有更多惊喜哦~

 

本文出自 “满满李 - 运维开发之路” 博客,请务必保留此出处http://xmdevops.blog.51cto.com/11144840/1874275

转载于:https://my.oschina.net/learnbo/blog/852726

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值