5.2 表格应用
5.2 表格应用
在CSS技术之前,网页的布局基本都是依靠表格制作,当有了CSS之后,表格就被很多设计师所抛弃。但笔者认为,在进行网页布局时不能盲目地抛弃表格,在该用表格的时候,还要用表格。例如数据列表。用表格来显示非常适合。
下面以表格中几个常用的应用作为示例来讲解。
5.2.1 表格变色
例如一张人员资料表,其HTML代码如下:
[插图]
应用样式后,显示效果如图5-19所示。
[插图]
这是一张非常普通的表格,现在需要给表格进行隔行变色操作。
1.普通的隔行变色
首先定义两个样式。
CSS代码如下:
[插图]
然后选择表格奇数行和偶数行分别添加样式,可以使用选择器来完成,代码如下:
[插图]
显示效果如图5-20所示。
[插图]
上面的代码会将表头也算进去,因此需要排除表格头部<thead>
中的<tr>
,将选择符改成如下代码:
[插图]
显示效果如图5-21所示。
[插图]
如果还需要将某一行变为高亮显示状态,那么可以使用contains选择器来实现。例如“王五”这行,代码如下:
[插图]
显示效果如图5-22所示。
[插图]
2.单选框控制表格行高亮
在以上表格的基础上,在第1列前加上一列单选框,如图5-23所示。
[插图]
当单击某一行后,此行被选中高亮显示,并且单选框被选中。实现该过程需要以下几个步骤。
(1)为表格行添加单击事件。
(2)给单击的当前行添加高亮样式,然后将它的兄弟行的高亮样式去掉,最后将当前行里的单选框设置为选中。
根据分析,可以写出如下jQuery代码:
[插图]
这样,就可以通过单击每行来实现表格行高亮,同时此行所在的单选框也被选中。
上面代码中使用了end()方法,当前对象是$(this),当进行addClass(‘selected’)操作时,对象并未发生变化,当执行 siblings().removeClass(‘selected’)操作时,对象已经变为$(this).siblings(),因此后面的操作都是针对这个对象的,如果需要重新返回到$(this)对象,就可以使用end()方法,这样后面的
[插图]
操作就是:
[插图]
而不是:
[插图]
另外,初始化表格的时候,如果默认已经有单选框被选中,那么也需要处理,代码如下:
[插图]
这样当初始化表格的时候,默认已经选中的行将被高亮显示,如图5-24所示。
[插图]
3.复选框控制表格行高亮
复选框控制表格行与单选框不同,复选框能选择多行变色,并没有限制被选择的个数。当单击某行时,如果已经高亮了,则移除高亮样式并去掉当前行复选框的选中状态;如果还没高亮,则添加高亮样式并将当前行的复选框选中。
判断是否已经高亮,可以使用hasClass()方法来完成。jQuery代码如下:
[插图]
显示效果如图5-25所示。
[插图]
此外,在不改变设计思路的前提下,上面的代码还可以再简化成如下代码:
[插图]
[插图]
当用户刚进入页面时,也要处理已经被选中的表格行。jQuery代码如下:
[插图]
5.2.2 表格展开关闭
在上例的人员表格的基础上,增加人员分类。
HTML代码如下:
[插图]
显示效果如图5-26所示。
[插图]
现在需要实现的是当单击分类行时,可以关闭相应的内容。例如单击“前台设计组”行,则它对应的“张山和李四”两行将收缩。
在这个表格中,给每个<tr>
元素设置属性是非常重要的,读者可以在HTML代码中看出一些规则,即给分类行设置了class=”parent”属性,同时也分别给它们设置了id值,而在它们下面的行,只设置了class属性,并且这个class的值是在id值的基础上通过加上“child_”来设置的。基于以上规则,jQuery实现代码如下:
[插图]
运行代码后,当单击表格的父行后,相应的子行会收缩,如图5-27所示。
[插图]
在图5-26 中,人员分类默认是展开的,如果当用户刚进入页面时,默认需要收缩起来,也是很简单的。只要触发click()事件即可。jQuery代码如下:
[插图]
5.2.3 表格内容筛选
在前面的例子中,如果要高亮显示“王五”那一行,可以使用contains选择器来完成,代码如下:
[插图]
利用该选择器再结合jQuery的filter()筛选方法,可以实现表格内容的过滤。
例如使用下面的jQuery代码就可以筛选出含有文本“李”的表格行。
[插图]
显示效果如图5-28所示。
[插图]
首先在表格上方添加一个文本框,用于根据用户输入的内容来筛选表格内容,然后为文本框绑定keyup事件,代码如下:
[插图]
最后将.filter(“:contains(‘李’)”)代码中的“李”用变量值代替,代码如下:
[插图]
当在文本框中输入“王”时,就会筛选出相应的表格行,显示效果如图5-29所示。
[插图]
注意表单元素有个特点,就是刷新网页后,其值会保持不变。例如在刚才筛选操作后,刷新网页,则会出现图5-30所示的现象,表单元素的值还存在,但表格内容已经被刷新了。
[插图]
要解决这个问题,只需要在 DOM 刚加载完时,为表单元素绑定事件并且立即触发该事件即可。
[插图]
这样,当页面被刷新后,就会立即执行id为“filterName”的keyup事件,因此表格内容就会保持刚才筛选出来的结果。