`

HTML5定制全选列头

阅读更多

随着HTML5产品分支的不断深入使用,HTML5的需求也是越来越多,表格组件的使用也不例外,什么排序,分页,自动列宽等。最近有客户提出了如果让表格的列头加上全选的功能。细细分析其实就是两部分,表格的body部分是勾选的列,表头也绘制成勾选的列。
对于表格body部分的勾选,最简单是应用TWaver默认的boolean类型的render,方法很简单,只要在创建表格列时设置下面的语句就行:

1 column.setValueType('boolean');

主要就是绘制表头的render,表头的render设置也是很easy,我们只要在表头的div中加上checkbox,然后再给checkbox加上动作,如果勾选上,就让这一列所有的数据都为true,反之亦然。代码如下:

1 var checkbox = document.createElement('input');
2 checkbox.setAttribute("type","checkbox");
3 checkbox.checked = true;
4 checkbox.onclick = function(e){
5 var checked = this.checked;
6 column.checked = checked;
7 databox.forEach(function(element){
8     element.setClient("nVisible",checked);
9 });
10 }
11 column.renderHeader = function(div){
12     div.style.textAlign = 'center';
13     div.appendChild(checkbox);
14 }


这样的默认效果感觉还不是那么美观,我们用图片来替代checkbox也可以达到同样的效果,再来看看这张图,感觉是不是好看了一点。

完整的代码实现见下方:

1 <!DOCTYPE html>
2 <meta charset="utf-8">
3 <html>
4 <head>
5     <title>Custom Table</title>
6     <style>
7         .visible-header{background:url(checkeye.png) 0px 0px; border:none; width: 12px; height: 7px; cursor: pointer;}
8         .unVisible-header{background:url(checkeye.png) -17px 0px;}
9     </style>
10     <script type="text/javascript" src="twaver.js"></script>
11     <script type="text/javascript">
12         function init() {
13             var box = new twaver.ElementBox();
14             initDataBox(box);
15             var table = new twaver.controls.Table(box);
16             table.setEditable(true);
17             var tablePane = new twaver.controls.TablePane(table);
18             var visibleColumn = createColumn(table, 'Visible''nVisible','client''boolean'30);
19             createColumn(table, 'Id''id''accessor''string',300);
20             createColumn(table, 'Name''name''accessor''string',70);
21             renderHeaderCheckBox(visibleColumn,box);
22             visibleColumn.renderCell = function(cell){renderCellCheckbox(cell)};
23             document.body.appendChild(tablePane.getView());
24             tablePane.getView().style.left = '50px';
25             tablePane.getView().style.top = '50px';
26             tablePane.getView().style.width = '400px';
27             tablePane.getView().style.height = '800px';
28         }
29  
30         function renderHeaderCheckBox(column,databox){
31             var checkbox = document.createElement('input');
32             checkbox.setAttribute("type","button");
33             checkbox.setAttribute("class","visible-header");
34             checkbox.checked = true;
35             checkbox.onclick = function(e){
36                 var checked = this.checked;
37                 column.checked = checked;
38                 if(checked){
39                     checkbox.setAttribute("class","visible-header");
40                 }else{
41                     checkbox.setAttribute("class","visible-header unVisible-header");
42                 }
43                 this.checked = !this.checked;
44                 databox.forEach(function(element){
45                     element.setClient("nVisible",checked);
46                 });
47             }
48             column.renderHeader = function(div){
49                 div.style.textAlign = 'center';
50                 div.appendChild(checkbox);
51             }
52         }
53  
54         function renderCellCheckbox(cell){
55                 var checkbox = document.createElement('input');
56                 checkbox.setAttribute("type","button");
57                 var checked = cell.data.getClient("nVisible");
58                 if(checked){
59                     checkbox.setAttribute("class","visible-header");
60                 }else{
61                     checkbox.setAttribute("class","visible-header unVisible-header");
62                 }
63                 checkbox.onclick = function(e){
64                     var checked = cell.data.getClient("nVisible");
65                     cell.data.setClient("nVisible",!checked);
66                 }
67                 cell.div.style.textAlign = 'center';
68                 cell.div.appendChild(checkbox);
69         }
70  
71         function initDataBox(box){
72             for(var i = 0; i < 10; i++){
73                 var node = new twaver.Node();
74                 node.setName("node"+i);
75                 node.setClient('nVisible',true);
76                 box.add(node);
77             }
78         }
79  
80         function createColumn(table, name, propertyName, propertyType, valueType, width) {
81             var column = new twaver.Column(name);
82             column.setName(name);
83             column.setPropertyName(propertyName);
84             column.setPropertyType(propertyType);
85             if (valueType) column.setValueType(valueType);
86             if(width) column.setWidth(width);
87             column.setEditable(true);
88             column.setSortable(false);
89             table.getColumnBox().add(column);
90             return column;
91         }
92     </script>
93 </head>
94 <body onload="init()" style="margin:0;">
95 </body>
96 </html>
分享到:
评论

相关推荐

    html多选下拉框 ,CheckBox的Select组件 可多选的下拉框

    在HTML中,创建一个可多选的下拉框通常涉及到`&lt;select&gt;`...通过这种方式,我们可以创建一个具有多选功能的下拉菜单,同时保持良好的用户体验和可定制性。在实际开发中,根据项目需求,可以选择适合的实现方法和技术栈。

    hmtl 多列选择

    HTML多列选择是一种常见的用户界面元素,用于在网页上提供多选项供用户选择。这种功能通常结合了HTML、CSS和JavaScript库,如jQuery,来创建交互性和灵活性强的多列选择框。在这个场景中,jQuery提供了强大的DOM操作...

    自定义可拖动列

    这需要实现一种选择机制,如复选框、全选/全不选按钮等,然后在选中的基础上执行拖放操作。 - **响应式设计**:确保在不同设备和屏幕尺寸上,拖动列的功能依然可用且直观。 - **性能优化**:大量数据时,频繁的DOM...

    sublime3 html 格式化

    Sublime Text 3是一款广受欢迎的轻量级、高效且高度可定制的文本编辑器,尤其受到程序员和Web开发者喜爱。对于HTML格式化的任务,Sublime Text 3提供了丰富的功能和插件,使得代码整洁、易读变得轻而易举。下面我们...

    【ASP.NET编程知识】浅析Repeater控件的使用 (原样导出和动态显示隐藏Repeater中的列).docx

    1. **全选批量操作**:可以添加一个CheckBox控件作为全选按钮,通过遍历Repeater的Items集合来实现批量操作。 2. **通过Eval绑定样式**:使用Eval函数结合CSS类或内联样式,可以动态设置项的样式。 3. **与...

    angular写一个列表的选择全选交互组件的示例

    5. **自定义UI和交互触发**:组件应允许开发者根据具体UI设计和交互需求进行定制。 **设计思路** 为了满足上述需求,我们需要创建几个装饰性指令来封装选择逻辑: 1. **moSelect指令**:作为容器指令,它包含了...

    Bootstrap_Table

    - **多级列头**:通过嵌套`&lt;th&gt;`实现多级列头,增强表格结构层次感。 4. **扩展功能** - **行选择**:通过`data-select-item-name="btSelectItem"`启用行选,提供全选/全不选功能。 - **行操作**:在每一行末尾...

    模仿EXT效果的datagrid

    5. 行选择:提供了多种行选择模式,如单选、多选和全选。 6. 编辑功能:内置了单元格和行的编辑功能,支持各种输入类型。 7. 自定义列:可以自定义列的显示方式,包括模板、样式和列宽。 8. 扩展性:EXT DataGrid有...

    jquery双列表框插件Bootstrap Dual Listbox

    5. **可配置性**:Bootstrap Dual Listbox提供多种可定制的参数,如是否启用筛选、是否显示计数器、选择按钮的文本等,可以根据实际需求进行调整。 6. **兼容性**:此插件兼容所有现代浏览器,包括Chrome、Firefox...

    jquery.dualListbox1.3 研究.zip

    综上所述,jQuery dualListbox1.3是一个强大且易于定制的双列选择框插件,它在Bootstrap框架下提供了高效的选择和管理大量选项的解决方案。通过深入研究和实践,我们可以将其无缝融入到Web项目中,提升用户在数据...

    layui表格实现代码

    在上面的代码中,我们可以看到,layui提供的JavaScript函数被用于实现表格的交互效果,例如 Checkbox 的选择和全选功能。 Layui表格的优点 Layui表格的优点包括: 1. 灵活的布局方式:Layui表格提供了灵活的布局...

    jQuery操作Table技巧大汇总

    jQuery操作Table技巧大汇总主要涵盖了如何使用jQuery对HTML表格进行一系列的交互和样式修改,包括鼠标响应、样式调整、行和列的隐藏与删除,以及单元格内容的获取与设置等。以下是对这些技巧的详细解释: 1. 鼠标...

    jquery实现带复选框的gridview

    通过对这个文件的深入研究和修改,开发者可以根据自己的需求定制功能,例如添加分页、排序、过滤等高级特性。 总的来说,"jquery实现带复选框的gridview"这个项目为开发者提供了一个起点,帮助他们快速构建具有复选...

    FisherGrid使用说明

    5. **列位置拖拉**:用户可以自由调整列的位置,以满足个性化布局需求。 6. **表格尺寸调整**:允许用户动态调整表格的长度和宽度,以适应不同屏幕和显示需求。 7. **列宽调整**:用户可以自定义列宽,优化数据...

    多选下拉框(jquery_multiselect)

    例如,可以将其应用于表格列的过滤条件,或者作为表单组件,用于用户提交多选数据。 在实际项目中,`jquery_multiselect` 可广泛应用于需要用户进行多选操作的场景,如设置权限、选择兴趣爱好、选择城市等。 总结...

    前端移动框架

    表单在移动设备上展示数据时,需要考虑到屏幕尺寸有限,因此框架通常会提供优化的表格布局,支持滚动、分页和列筛选等功能。"新增/编辑"功能则是指框架提供的数据操作能力,允许用户在界面上添加新记录或编辑现有...

    ExtJs开发实战

    2. Checkbox全选功能:表格中会使用Checkbox来实现多选功能,ExtJs中可以方便地通过配置选项来实现全选或反选,以及对应行的选中状态管理。 3. 动态列显示:在数据展示时,用户可能需要根据自己的需求选择显示哪些...

    jquery.jqgrid最新版

    4. 行选择:支持单行、多行和全选,可通过`selarrrow`获取选中行数据。 5. 表格事件:包括`loadComplete`、`clickRow`、`beforeSelectRow`等,用于扩展功能和业务逻辑。 四、jqGrid样式与皮肤 jqGrid提供了多种...

    smartGwt学习笔记

    这个方法可能涉及到遍历当前页面上的所有记录,根据传入的列号(fieldNum)来切换选择状态。如果`changeSelectRange`返回true,表示成功执行了全选或反选操作,那么可以进一步执行其他逻辑。 这个解决方案的核心...

    SlickGridDemo

    5. **插件**:SlickGrid有许多社区维护的插件,例如分页插件、全选/全不选插件、行拖放插件等,这些都可以通过简单配置启用。 6. **自定义行为**:如果标准功能无法满足需求,开发者可以通过覆盖默认行为或编写...

Global site tag (gtag.js) - Google Analytics