- 第2版前言
- 本书结构
- 读者对象
- 本书约定
- 读者反馈&示例下载
- 疑难解答&本书勘误
- 第1章 认识 jQuery
- 第2章 jQuery 选择器
- 第3章 jQuery 中的 DOM 操作
- 第4章 jQuery 中的事件和动画
- 第5章 jQuery 对表单、表格的操作及更多应用
- 第6章 jQuery 与 Ajax 的应用
- 第7章 jQuery 插件的使用和写法
- 第8章 用 jQuery 打造个性网站
- 第9章 jQuery Mobile
- 第10章 jQuery 各个版本的变化
- 第11章 jQuery 性能优化和技巧
- 附录A 关于 $(document).ready() 函数
- 附录B Firebug
- 附录C Ajax 的 XMLHttpRequest 对象的属性和方法
- 附录D jQuery $.ajax() 方法的参数详解
- 附录E jQuery 加载并解析 XML
- 附录F 插件 API
- 附录G jQuery 速查表
5.2 表格应用
在CSS技术之前,网页的布局基本都是依靠表格制作,当有了CSS之后,表格就被很多设计师所抛弃。但笔者认为,在进行网页布局时不能盲目地抛弃表格,在该用表格的时候,还要用表格。例如数据列表。用表格来显示非常适合。
下面以表格中几个常用的应用作为示例来讲解。
5.2.1 表格变色
例如一张人员资料表,其HTML代码如下:
应用样式后,显示效果如图5-19所示。
图5-19 初始化效果
这是一张非常普通的表格,现在需要给表格进行隔行变色操作。
1.普通的隔行变色
首先定义两个样式。
CSS代码如下:
然后选择表格奇数行和偶数行分别添加样式,可以使用选择器来完成,代码如下:
显示效果如图5-20所示。
注意:$("tr:odd")和$("tr:even")选择器中索引是从0开始的,因此第1行是偶数。
上面的代码会将表头也算进去,因此需要排除表格头部<thead>中的<tr>,将选择符改成如下代码:
显示效果如图5-21所示。
图5-20 普通的隔行变色
图5-21 表格隔行变色
如果还需要将某一行变为高亮显示状态,那么可以使用contains选择器来实现。例如王五
这行,代码如下:
显示效果如图5-22所示。
2.单选框控制表格行高亮
在以上表格的基础上,在第1列前加上一列单选框,如图5-23所示。
图5-22 高亮显示"王五"这行
图5-23 带单选框的表格
当单击某一行后,此行被选中高亮显示,并且单选框被选中。实现该过程需要以下几个步骤。
(1)为表格行添加单击事件。
(2)给单击的当前行添加高亮样式,然后将它的兄弟行的高亮样式去掉,最后将当前行里的单选框设置为选中。
根据分析,可以写出如下jQuery代码:
这样,就可以通过单击每行来实现表格行高亮,同时此行所在的单选框也被选中。
上面代码中使用了end()方法,当前对象是$(this),当进行addClass('selected')操作时,对象并未发生变化,当执行siblings().removeClass('selected')操作时,对象已经变为$(this).siblings(),因此后面的操作都是针对这个对象的,如果需要重新返回到$(this)对象,就可以使用end()方法,这样后面的
操作就是:
而不是:
另外,初始化表格的时候,如果默认已经有单选框被选中,那么也需要处理,代码如下:
这样当初始化表格的时候,默认已经选中的行将被高亮显示,如图5-24所示。
图5-24 默认选中行被高亮显示
注意:$('table :radio:checked').parent().parent().addClass('selected');是通过parent()方法逐步向父节点获取相应的元素的,也可以使用parents()方法直接获取:
$('table :radio:checked').parents("tr").addClass('selected');
此外,如果通过has选择器也可以进一步简化,表示含有选中的单选框的<tr>行将被高亮显示:
$('tbody>tr:has(:checked)').addClass('selected');
3.复选框控制表格行高亮
复选框控制表格行与单选框不同,复选框能选择多行变色,并没有限制被选择的个数。当单击某行时,如果已经高亮了,则移除高亮样式并去掉当前行复选框的选中状态;如果还没高亮,则添加高亮样式并将当前行的复选框选中。
判断是否已经高亮,可以使用hasClass()方法来完成。jQuery代码如下:
显示效果如图5-25所示。
图5-25 复选框控制行高亮
此外,在不改变设计思路的前提下,上面的代码还可以再简化成如下代码:
注意:在$(this)[hasSelected?"removeClass":"addClass"]('selected');中:
[hasSelected?"removeClass":"addClass"]这是一个三元运算,结果为:"removeClass"或者"addClass"。因此
$(this)[hasSelected?"removeClass":"addClass"]('selected');
其实代表这2种情况:
当用户刚进入页面时,也要处理已经被选中的表格行。jQuery代码如下:
5.2.2 表格展开关闭
在上例的人员表格的基础上,增加人员分类。
HTML代码如下:
显示效果如图5-26所示。
现在需要实现的是当单击分类行时,可以关闭相应的内容。例如单击前台设计组
行,则它对应的张山和李四
两行将收缩。
在这个表格中,给每个<tr>元素设置属性是非常重要的,读者可以在HTML代码中看出一些规则,即给分类行设置了class="parent"属性,同时也分别给它们设置了id值,而在它们下面的行,只设置了class属性,并且这个class的值是在id值的基础上通过加上child_
来设置的。基于以上规则,jQuery实现代码如下:
运行代码后,当单击表格的父行后,相应的子行会收缩,如图5-27所示。
图5-26 人员分类
图5-27 单击某行,对齐的子行会收缩
在图5-26中,人员分类默认是展开的,如果当用户刚进入页面时,默认需要收缩起来,也是很简单的。只要触发click()事件即可。jQuery代码如下:
5.2.3 表格内容筛选
在前面的例子中,如果要高亮显示王五
那一行,可以使用contains选择器来完成,代码如下:
利用该选择器再结合jQuery的filter()筛选方法,可以实现表格内容的过滤。
例如使用下面的jQuery代码就可以筛选出含有文本李
的表格行。
显示效果如图5-28所示。
图5-28 筛选之后效果
首先在表格上方添加一个文本框,用于根据用户输入的内容来筛选表格内容,然后为文本框绑定keyup事件,代码如下:
最后将.filter(":contains('李')")代码中的李
用变量值代替,代码如下:
当在文本框中输入王
时,就会筛选出相应的表格行,显示效果如图5-29所示。
注意表单元素有个特点,就是刷新网页后,其值会保持不变。例如在刚才筛选操作后,刷新网页,则会出现图5-30所示的现象,表单元素的值还存在,但表格内容已经被刷新了。
图5-29 根据用户输入的文本来筛选
图5-30 刷新后显示的表格数据
要解决这个问题,只需要在DOM刚加载完时,为表单元素绑定事件并且立即触发该事件即可。
这样,当页面被刷新后,就会立即执行id为filterName
的keyup事件,因此表格内容就会保持刚才筛选出来的结果。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论