WEB入门之十三 jQuery选择器
学习内容
- jQuery层次选择器
- jQuery属性选择器
- jQuery表单选择器
- jQuery过滤选择器
能力目标
- 熟悉jQuery各种选择器的使用场合
- 能熟练使用jQuery各种选择器
本章简介
上一章我初步接触了jQuery,并能够编写一些简单的jQuery代码,其中重点是jQuery基本选择器。jQuery的选择器非常强大,它是jQuery的根基,基本上任何操作都要依赖于选择器。本章重点学习jQuery选择器,包括层次选择器、属性选择器、表单选择器、内容选择器和过滤选择器等。
核心技能部分
4.1 jQuery选择器
jQuery选择器的主要功能是查找、匹配并获取页面元素,这是进行任何操作的前提。jQuery提供了众多功能强大且使用方便的选择器,完全能满足开发需求。
jQuery选择器使用起来非常简单,因为它完全继承了CSS选择器的风格,但是功能更强大,并且进行了跨浏览器处理。
jQuery选择器主要包括:基本选择器、层次选择器、属性选择器、表单选择器、内容选择器和过滤选择器。基本选择器在上一章已经做过介绍,此处不再多述,其他选择器会在下面逐一进行介绍。
4.1.1 层次选择器
层次选择器是通过DOM对象之间的层次关系来获取并匹配元素的,例如后代元素、子元素、相邻元素等,具体说明见表4-1-1所示。
表4-1-1 层次选择器
层次选择器 |
说明 |
$("ancestor descendant") |
匹配并获取ancestor元素里的所有后代descendant元素 |
$("parent > child") |
匹配并获取parent元素里的子元素 |
$("prev + next") |
匹配并获取紧挨着prev元素后的next元素 |
$("prev ~ siblings") |
匹配并获取prev元素后的所有siblings元素 |
下面我们通过具体的示例来演示层次选择器的用法。
示例4.1
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>示例4.1</title>
- <script src="jquery-1.7.2.min.js"></script>
- <style>
- div{
- width:120px;
- }
- .sec{
- margin-left:15px;
- }
- .three{
- margin-left:25px;
- }
- a:link,a:visited{
- text-decoration:none;
- color:black;
- }
- </style>
- </head>
- <body>
- <div id="g1"><img src="img/jia.gif" /><a href="#" >国产</a>
- <div>
- <div class="sec"><img src="img/jia.gif" /><a href="#" >北京奔驰</a></div>
- <div class="sec">
- <img src="img/jia.gif" /><a href="#" >北京现代</a>
- <div>
- <div class="three">
- <img src="img/flag.gif"/><a href="#">悦翔</a>
- </div>
- <div class="three">
- <img src="img/flag.gif"/><a href="#">索纳塔</a>
- </div>
- <div class="three">
- <img src="img/flag.gif"/><a href="#">途胜</a>
- </div>
- <div class="three">
- <img src="img/flag.gif"/><a href="#">伊兰特</a>
- </div>
- </div>
- </div>
- <div class="sec">
- <img src="img/jia.gif" /><a href="#" >比亚迪</a>
- </div>
- </div>
- </div>
- </body>
- </html>
- <script>
- alert($("#g1 div").html());
- alert($("#g1 a").html());
- alert($("#g1 .sec").size());
- alert($("#g1 > .sec").size());
- </script>
上述代码实现了一个如图4.1.1所示的树形层次结构,我们以此来演示jQuery层次选择器。
$("#g1 div")表示获取id是g1的元素里所有的后代div。
$("#g1 a")表示获取id是g1的元素的子元素a
$("#g1 .sec")两个选择器之间是空格,$("#g1 > .sec")两个选择器之间是>,具体差别可以通过最后两个弹出的对话框表现出来
$("#g1 .sec")表示获取id是g1的元素里所有的类名是.sec的元素,一共有3个。$("#g1 > .sec")也是获取id是g1的元素里类名是.sec的元素,但它只匹配g1里的子元素,即必须是g1的一级子节点,所以最终是0个。
示例4.1演示了表4-1-1中前两种层次选择器的用法,下面我们通过示例4.2演示后两种层次选择器的用法。
示例4.2
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>示例4.2</title>
- <script src="jquery-1.7.2.min.js"></script>
- </head>
- <body>
- <div>
- <div id="g">测试</div>
- <a href="#">悦翔</a><a href="#">索纳塔</a>
- <div><a href="#">途胜</a></div>
- <div><a href="#">悦动</a></div>
- </div>
- </body>
- </html>
- <script>
- document.write("匹配#g+a<br/>");
- $("#g+a").each(
- function()
- {
- document.write($(this).html()+"<br/>");
- }
- );
- document.write("匹配#g~a<br/>");
- $("#g~a").each(
- function()
- {
- document.write($(this).html()+"<br/>");
- }
- );
- </script>
$("#g+a")表示获取id是g的元素后面的第一个超链接,所以第一个each只会循环输出一次,如图4.1.6所示。$("#g~a")表示获取id是g的元素后面的所有超链接,但必须是g的一级节点元素,所以第二个each会循环输出两次。
4.1.2 属性选择器
顾名思义,属性选择器是指通过元素某个属性及其值来匹配并获取相关元素的。具体说明见表4-1-2所示。
表4-1-2 属性选择器
属性选择器 |
说明 |
$(" selector [ attr ] ") |
获取匹配selector选择器的并且拥有attr属性的元素 |
$(" selector [ attr =' val ' ] ") |
获取匹配selector选择器的并且attr属性的值是val的元素 |
$(" selector [ attr !=' val ' ] ") |
获取匹配selector选择器的并且attr属性的值不是val的元素 |
$(" selector [ attr ^=' val ' ] ") |
获取匹配selector选择器的并且attr属性的值是以val开始的元素 |
$(" selector [ attr $=' val ' ] ") |
获取匹配selector选择器的并且attr属性的值是以val结尾的元素 |
$(" selector [ attr *=' val ' ] ") |
获取匹配selector选择器的并且attr属性的值包含val的元素 |
$(" selector [ ] [ ] [ ] ...") |
属性选择器组合 |
下面通过一个示例来演示属性选择器的具体用法。该示例实现了一个注册表单,当用户单击【注册】按钮时对所有的文本框进行非空验证,如图4.1.7所示。
图4.1.7 注册页面
这里只给出脚本代码,如下所示。
示例4.3
- <script>
- $("#btn").click( //单击事件
- function()
- {
- $("input[type='text']").each(
- function()
- {
- if($(this).val()=="")
- {
- alert("所有的文本框都必须填写!");
- return false;
- }
- }
- );
- }
- );
- </script>
文本框元素的标签名是input,type属性的值是text,所以获取所有文本框的属性选择器就可以这样写:$("input[type='text']"),然后通过each( )逐个遍历,并通过val( )进行非空验证。
4.1.3 表单选择器
表单在Web前端开发中使用非常频繁,jQuery专门加入了表单选择器,这给开发人员操纵表单带来了极大的便利,详见表4-1-3所示。
表4-1-3 表单选择器
名称 |
说明 |
匹配并获得表单中所有input, textarea, select和button元素 |
|
匹配并获得所有的文本框 |
|
匹配并获得所有密码框 |
|
匹配并获得所有单选按钮 |
|
匹配并获得所有复选框 |
|
匹配并获得所有提交按钮 |
|
匹配并获得所有图片 |
|
匹配并获得所有重置按钮 |
|
匹配并获得所有按钮 |
|
匹配并获得所有文件域 |
|
:hidden |
匹配并获得所有隐藏域 |
下面通过一个示例来演示表单选择器的具体用法
示例4.4
<script>
document.write("表单元素一共有:"+$(":input").size());
document.write("文本框一共有:"+$(":text").size());
document.write("复选框一共有:"+$(":checkbox").size());
document.write("单选按钮一共有:"+$(":radio").size());
</script>
通过查看图4.1.8,我们能判断出该表单中一共有10个元素,其中文本框1个,复选框3个,单选按钮2个
4.1.4 表单属性选择器
表单属性选择器是对表单选择器的有力补充,详见表4-1-4所示。
表4-1-4 表单属性选择器
名称 |
说明 |
:enabled |
匹配并获得所有正常使用的元素 |
:disabled |
匹配并获得所有禁用的元素 |
:checked |
匹配并获得所有被选中的复选框 |
:selected |
匹配并获得下拉列表框的选中项 |
示例4.5展示了表单属性选择器的具体用法,代码如下所示。
示例4.5
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>示例4.5</title>
- <script src="jquery-1.7.2.min.js"></script>
- </head>
- <body>
- <FORM>
- <TABLE width="50%" border="1">
- <TR>
- <TD>来自:</TD>
- <TD>
- <select name="select">
- <option value="北京">北京</option>
- <option value="上海">上海</option>
- <option value="广州">广州</option>
- </select> </TD>
- </TR>
- <TR>
- <TD>爱好:</TD>
- <TD>
- <input type="checkbox" value="篮球" name="hop">
- 篮球
- <input type="checkbox" value="足球" name="hop">
- 足球
- <input type="checkbox" value="排球" name="hop" checked="checked">
- 排球</TD>
- </TR>
- <TR>
- <TD> </TD>
- <TD>
- <input type="button" id="btn" value="提交"/>
- <input type="reset" value="重置" disabled="disabled"></TD>
- </TR>
- </TABLE>
- </FORM>
- <p>
- <div id="content1"></div>
- <div id="content2"></div>
- <div id="content3"></div>
- </body>
- </html>
- <script>
- $("#btn").click(
- function()
- {
- $("#content1").html("下拉列表框的选中项的值是:
- "+$(":selected").val());
- $("#content2").html("选中的复选框的值有:");
- $("input:checked").each(
- function()
- {
- $("#content2").html($("#content2").html()+$(this).val());
- }
- );
- $("#content3").html("被禁用的元素的值是:
- "+$("input:disabled").val());
- }
- )
- </script>
上述代码使用表单属性选择器对下拉列表框好复选框进行了操作
4.1.5 内容选择器
内容选择器主要使用通过元素所包含的文本或子元素进行匹配或获取,详见表4-1-5所示。
表4-1-5 内容选择器
名称 |
说明 |
:contains ( txt ) |
匹配并获得包含有txt文本的元素 |
:empty |
匹配并获得没有子元素或者文本的元素 |
:has ( selector ) |
匹配并获得包含有selector选择器的元素 |
示例4.6展示了内容选择器的具体用法,代码如下所示。
示例4.6
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>示例4.6</title>
- <script src="jquery-1.7.2.min.js"></script>
- </head>
- <body>
- <div>I love jQuery</div>
- <div>
- <a href="www.baidu.com" id="a">百度</a>
- <div></div>
- </div>
- <script>
- document.write($("div:contains('jQuery')").html());
- document.write($("div:empty").size());
- document.write($("div:has('#a')").html());</script>
- </body>
- </html>
$("div:contains('jQuery')")表示获取包含jQuery文本的div;$("div:empty")表示获取不包含子元素或文本的元素;$("div:has('#a')")表示获取包含#a选择器的元素,运行效果如图4.1.11所示。
图4.1.11 运行效果
4.1.6 过滤选择器
过滤选择器是在获取到元素后通过索引进一步进行过滤或筛选,详见表4-1-6所示。
表4-1-6 过滤选择器
名称 |
说明 |
获得匹配到的第一个元素 |
|
获得匹配到的最后一个元素 |
|
获得除了匹配的元素之外的元素 |
|
匹配所有索引值为偶数的元素,从0开始计数 |
|
匹配所有索引值为奇数的元素,从0开始计数 |
|
匹配一个给定索引值的元素,从0开始计数 |
|
匹配所有大于给定索引值的元素,从0开始计数 |
|
匹配所有小于给定索引值的元素,从0开始计数 |
示例4.7展示了过滤选择器的具体用法,代码如下所示。
示例4.7
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>示例4.7</title>
- <script src="jquery-1.7.2.min.js"></script>
- </head>
- <body>
- <table width="289" height="184" border="1">
- <tr>
- <td align="center">0</td>
- <td align="center">第0行</td>
- </tr>
- <tr>
- <td align="center">1</td>
- <td align="center">第1行</td>
- </tr>
- <tr>
- <td align="center">2</td>
- <td align="center">第2行</td>
- </tr>
- <tr>
- <td align="center">3</td>
- <td align="center">第3行</td>
- </tr>
- <tr>
- <td align="center">4</td>
- <td align="center">第4行</td>
- </tr>
- <tr>
- <td align="center">5</td>
- <td align="center">第5行</td>
- </tr>
- <tr>
- <td align="center">6</td>
- <td align="center">第6行</td>
- </tr>
- <tr>
- <td align="center">7</td>
- <td align="center">第7行</td>
- </tr>
- <tr>
- <td align="center">8</td>
- <td align="center">第8行</td>
- </tr>
- </table>
- <script>
- document.write($("tr:first").html());
- document.write($("tr:last").html());
- $("tr:odd").each(
- function()
- {
- document.write($(this).html());
- }
- );
- $("tr:even").each(
- function()
- {
- document.write($(this).html());
- }
- );
- document.write($("tr:eq(5)").html());
- $("tr:gt(6)").each(
- function()
- {
- document.write($(this).html());
- }
- );
- </script>
- </body>
- </html>
为了更清晰的演示过滤选择器的索引,我们在本示例中添加了一个9行2列的表格,然后使用各种过滤选择器获取表格中的行。
4.1.7 可见性选择器
可见性选择器比较简单,主要是通过显示/隐藏状态来获取和匹配元素的,详见表4-1-7。
表4-1-7 可见性选择器
名称 |
说明 |
匹配所有的隐藏元素 |
|
匹配所有的可见元素 |
示例4.8展示了可见性选择器的具体用法,代码如下所示。
示例4.8
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
- <title>示例4.8</title>
- <script src="jquery-1.7.2.min.js"></script>
- </head>
- <body>
- <input type="text" style="display:none" value="文本框1" />
- <input type="text" style="display:block" value="文本框2"/>
- <script>
- alert($("input:hidden").val());
- alert($("input:visible").val());
- </script>
- </body>
- </html>
4.2 选择器注意事项
4.2.1 选择器中含有"."、"#"、"("、"]"特殊符号
根据W3C的规定,属性的值中是不能含有一些特殊字符的,例如"."、"#"、"("、"]"等。但在实际开发中可能会出现使用这些特殊字符的情况,例如下面的代码:
<div id="t#b">I Love jQuery</div>
<div id="t[1]"></div>
那么这时如果使用jQuery选择器来获取元素的话,代码如下所示:
$("#t#b").html();
$("#t[1]").html();
但是这样写是获取不到元素的,因为选择器包含有特殊字符,那么我们可以通过转义字符来解决这个问题。
$("#t\\#b").html();
$("#t\\[1\\]").html();
jQuery中使用\\来进行字符的转义。
4.2.2 选择器中的空格
选择器中有时需要出现空格,这需要大家特别注意,因为多一个空格和少一个空格会导致出现截然不同的效果,例如下面的代码。
示例4.9
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title>示例4.9</title>
- <script src="jquery-1.7.2.min.js"></script>
- </head>
- <body>
- <div class="test">
- <div style="display:none">1</div>
- <div style="display:none">2</div>
- <div style="display:none">3</div>
- <div style="display:none">4</div>
- </div>
- <div class="test" style="display:none">5</div>
- <div class="test" style="display:none">6</div>
- </body>
- </html>
- <script>
- document.write($(".test :hidden").size()); //选择器中包含空格
- document.write($(".test:hidden").size()); //选择器中没有空格
- </script>
带有空格的$(".test : hidden")表示后代选择器;而没有空格的$(".test:hidden")表示可见性选择器。
本章总结
选择器是jQuery的核心,基本上任何业务及功能的实现都需要选择器。jQuery提供了诸多功能强大的选择器,包括层次选择器、属性选择器、表单选择器、内容选择器等,内容比较多,大家在使用的时候要注意每种选择器的语法以及它们的适用场合。
任务实训部分
1:实现树形菜单
训练技能点
jQuery层次选择器
需求说明
在示例4.1的基础上使用jQuery层次选择器实现树形菜单的收缩/展开特效。单击一级、二级节点能够收缩和展开其下面的子节点。
2:实现表单验证
训练技能点
jQuery表单选择器
需求说明
按照图4.2.2所示的界面实现一个简单的表单,并使用jQuery表单选择器进行表单验证,要求:所有项都不能为空,密码长度必须大于等于8,单击“快速注册”图片时进行验证。
3:实现全选/全不选
训练技能点
Ø jQuery表单属性选择器
需求说明
按图使用jQuery表单选择器实现全选/全不选效果。
实现步骤
(1) 实现图4.2.3所示的界面,参考代码如下所示。
(2) 使用表单选择器实现全选/全不选效果,参考代码如下所示。
<script>
//#all表示全选复选框的id
function qx()
{
$(":checkbox").each(
function(){
$(this).get(0).checked=$("#all").get(0).checked;
}
)
}
</script>
4:表格隔行加背景色
训练技能点
Ø jQuery过滤选择器
需求说明
按照图界面,使用jQuery过滤选择器实现表格隔行背景变色的效果。
实现步骤
(1) 实现图4.2.4所示的界面
(2) 使用jQuery过滤选择器获取把表格中的奇数行(标题行除外)
(3) 把获取到得奇数行设置为灰色背景色,参考代码如下所示。
<script>
$("tr:gt(0):odd").each(
function()
{
$(this).get(0).style.backgroundColor="#CCCCCC";
}
)
</script>
巩固练习
一、选择题
1. 以下()不属于jQuery选择器。
A. 表单选择器
B. 子选择器
C. 层次选择器
D. 表单选择器
2. 以下关于jQuery层次选择器的说法正确的是()。
A. 层次选择器主要针对表单的使用
B. $("ancestor descendant")和$("ancestor > descendant")所获取的元素一样
C. $("prev + next")和$("prev ~ next")所获取的元素一样
D. 通过层次选择器一次只能获得一个元素
3. 以下关于jQuery表单和表单属性选择器说法正确的是()。
A. 表单选择器只能用于表单
B. 表单属性选择器是表单选择器的附属,没有表单选择器就没有表单属性选择器
C. 表单选择器和表单属性选择器不能和其他选择器合用
D. :button选择器获得的按钮包括提交按钮和重置按钮
4. 下列关于jQuery选择器中特殊字符的说法错误的是()。
A. jQuery选择器中不能包含任何特殊字符
B. jQuery选择器可以包含空格
C. jQuery选择器支持转义字符
二、上机练习
数据库中的数据查询出来后,在前台用表格进行显示。但是由于部分数据不存在造成一些单元格是空的,现在要求使用jQuery选择器把空单元格中的空文本改为“暂无”。
WEB入门之十三 jQuery选择器的更多相关文章
- WEB入门之十二 jquery简介
学习内容 jQuery简介 搭建jQuery开发环境 jQuery基本选择器 能力目标 熟悉jQuery开发环境 能编写简单的jQuery代码 本章简介 在前面两章,我们学习了JavaScript面向 ...
- JQuery选择器和DOM的操作-入门学习
嘿嘿,今天学习了JQuery,前面的一周都在学习javascript,今天学习了JQuery,虽然javascript的类库有很多个,例如:Prototype,Dojo,JQuery等,javascr ...
- Web前端学习笔记之jQuery选择器
JQuery过滤器 经过一晚上的查找整理,终于整理出一套应该算最全面的JQuery选择过滤器的方法了.所有代码均经过测试.首先HTML代码 HTML Code <html><head ...
- jQuery入门、jQuery选择器、jQuery操作
一.什么是jQuery及如何使用 1.1 jQuery 简介 jQuery是一个兼容多浏览器的javascript函数库(把我们常用的一些功能进行了封装,方便我们来调用,提高我们的开发效率.),核心理 ...
- 精通jQuery选择器
虽然jQuery上手简单,相比于其他库学习起来较为简单,但是要全面掌握,却不轻松.因为它涉及到网页开发的方方面面,提供的方法和内部变化有上千种之多.初学者常常感到,入门很方便,提高很困难.本文的目标是 ...
- JQuery选择器大全 前端面试送命题:面试题篇 对IOC和DI的通俗理解 c#中关于协变性和逆变性(又叫抗变)帮助理解
JQuery选择器大全 jQuery 的选择器可谓之强大无比,这里简单地总结一下常用的元素查找方法 $("#myELement") 选择id值等于myElement的元素 ...
- Web入门
目录 Web入门 学习web路线 前端基础 三剑客的作用 BS架构 数据格式 HTTP协议 四大特性 数据格式 HTTP 状态码分类 状态码列表 案例:简易的BS架构 Web入门 什么是前端? 任何与 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- jquery 选择器(name,属性,元素)大全
jQuery 选择器大体上可分为:基本选择器.层次选择器.过滤选择器.表单选择器. 其中过滤选择器可以分为:简单过滤选择器.内容过滤选择器.可见性过滤选择器.属性过滤选择器.子元素过滤选择器.表单对象 ...
随机推荐
- 个人java框架 技术分析
1.框架选型 spring-boot https://github.com/JeffLi1993/springboot-learning-example https://mp.weixin.qq.co ...
- Mysql8.0的登录大坑……(忘记登录密码也可以这么搞)
关于安装和使用就不说了,属于基本操作了: 我来重点记录一下关于使用前,使用navicat登录的时候报错,1130和2059 查看安装后随机生成的密码: grep 'temporary password ...
- 【nodejs】让nodejs像后端mvc框架(asp.net mvc )一样处理请求--控制器的声明定义和发现篇(3/8)
文章目录 前情概要 前面文章把路由已经介绍的差不多了,包括url映射,路由选择等.接下来讲一讲controller的一些基本规则 BaseController的所有代码都在这里拉.相当简单. 主要逻辑 ...
- cross-env简介
是什么 运行跨平台设置和使用环境变量的脚本 出现原因 当您使用NODE_ENV =production, 来设置环境变量时,大多数Windows命令提示将会阻塞(报错). (异常是Windows上的B ...
- 把cnblogs变成简书 - cnblogs博客自定义皮肤css样式
吐槽 博客园cnblogs作为老牌的IT技术博客类网站,为广大的开发者提供了非常不错的学习交流平台. 虽然博客内容才是重点,但是如果有赏心悦目的页面不更好吗! cnblogs可以更换博客模板,并且提供 ...
- 个人博客作业Week2 是否需要有代码规范
问题:是否需要有代码规范 对于是否需要有代码规范,请考虑下列论点并反驳/支持: 1.这些规范都是官僚制度下产生的浪费大家的编程时间.影响人们开发效率, 浪费时间的东西. 2.我是个艺术家,手艺人,我有 ...
- 关于对springboot程序配置文件使用jasypt开源工具自定义加密
一.前言 在工作中遇到需要把配置文件加密的要求,很容易就在网上找到了开源插件 jasypt (https://github.com/ulisesbocchio/jasypt-spring-boot# ...
- PAT 甲级 1134 Vertex Cover
https://pintia.cn/problem-sets/994805342720868352/problems/994805346428633088 A vertex cover of a gr ...
- Building Java Projects with Gradle
https://spring.io/guides/gs/gradle/ Gradle学习系列教程 https://blog.csdn.net/column/details/gradle-transla ...
- JavaScript模拟表单(带数组的复杂数据结构)提交
function test(){ var typeArray = new Array(); typeArray.push("mm"); typeArray.pus ...