整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「HTML」操作表格

lt;table>元素是HTML中最复杂的结构之一。要想创建表格,一般都必须涉及表示表格行、单元格、表头等方面的标签。由于涉及的标签多,因而使用核心DOM方法创建和修改表格往往都免不了要编写大量的代码。假设我们要使用DOM来创建下面的HTML表格。
<table border="1" width="100%">
<tbody>
<tr>
<td>Cell 1,1</td>
<td>Cell 2,1</td>
</tr>
<tr>
<td>Cell 1,2</td>
<td>Cell 2,2</td>
</tr>
</tbody>
</table>


要使用核心DOM方法创建这些元素,得需要像下面这么多的代码:
//创建table
var table = document.createElement("table");
table.border = 1;
table.width = "100%";


//创建tbody
var tbody = document.createElement("tbody");
table.appendChild(tbody);


//创建第一行
var row1 = document.createElement("tr");
tbody.appendChild(row1);
var cell1_1 = document.createElement("td");
cell1_1.appendChild(document.createTextNode("Cell 1,1"));
row1.appendChild(cell1_1);
var cell2_1 = document.createElement("td");
cell2_1.appendChild(document.createTextNode("Cell 2,1"));
row1.appendChild(cell2_1);


//创建第二行
var row2 = document.createElement("tr");
tbody.appendChild(row2);
var cell1_2 = document.createElement("td");
cell1_2.appendChild(document.createTextNode("Cell 1,2"));
row2.appendChild(cell1_2);
var cell2_2= document.createElement("td");
cell2_2.appendChild(document.createTextNode("Cell 2,2"));
row2.appendChild(cell2_2);


//将表格添加到文档主体中
document.body.appendChild(table);


显然,DOM代码很长,还有点不太好懂。为了方便构建表格,HTML DOM还为<table>、<tbody>和<tr>元素添加了一些属性和方法。
为元素添加的属性和方法如下。


caption:保存着对<caption>元素(如果有)的指针。
tBodies:是一个<tbody>元素的HTMLCollection。
tFoot:保存着对<tfoot>元素(如果有)的指针。
tHead:保存着对<thead>元素(如果有)的指针。
rows:是一个表格中所有行的HTMLCollection。


createTHead():创建<thead>元素,将其放到表格中,返回引用。
createTFoot():创建<tfoot>元素,将其放到表格中,返回引用。
createCaption():创建<caption>元素,将其放到表格中,返回引用。
deleteTHead():删除<thead>元素。
deleteTFoot():删除<tfoot>元素。
deleteCaption():删除<caption>元素。
deleteRow(_pos_):删除指定位置的行。
insertRow(_pos_):向rows集合中的指定位置插入一行。
为<tbody>元素添加的属性和方法如下。
rows:保存着<tbody>元素中行的HTMLCollection。
deleteRow(pos):删除指定位置的行。


insertRow(pos):向rows集合中的指定位置插入一行,返回对新插入行的引用。
为<tr>元素添加的属性和方法如下。
cells:保存着<tr>元素中单元格的HTMLCollection。
deleteCell(pos):删除指定位置的单元格。
insertCell(pos):向cells集合中的指定位置插入一个单元格,返回对新插入单元格的引用。
使用这些属性和方法,可以极大地减少创建表格所需的代码数量。例如,使用这些属性和方法可以将前面的代码重写如下(加阴影的部分是重写后的代码)。
//创建table
var table = document.createElement("table");
table.border = 1;
table.width = "100%";


//创建tbody
var tbody = document.createElement("tbody");
table.appendChild(tbody);


//创建第一行tbody.insertRow(0);tbody.rows[0].insertCell(0);tbody.rows[0].cells[0].appendChild(document.createTextNode("Cell 1,1"));tbody.rows[0].insertCell(1);tbody.rows[0].cells[1].appendChild(document.createTextNode("Cell 2,1"));//创建第二行tbody.insertRow(1);tbody.rows[1].insertCell(0);tbody.rows[1].cells[0].appendChild(document.createTextNode("Cell 1,2"));tbody.rows[1].insertCell(1);tbody.rows[1].cells[1].appendChild(document.createTextNode("Cell 2,2"));


//将表格添加到文档主体中
document.body.appendChild(table);


在这次的代码中,创建<table>和<tbody>的代码没有变化。不同的是创建两行的部分,其中使用了HTML DOM定义的表格属性和方法。在创建第一行时,通过<tbody>元素调用了insertRow()方法,传入了参数0——表示应该将插入的行放在什么位置上。执行这一行代码后,就会自动创建一行并将其插入到<tbody>元素的位置0上,因此就可以马上通过tbody.rows[0]来引用新插入的行。
创建单元格的方式也十分相似,即通过<tr>元素调用insertCell()方法并传入放置单元格的位置。然后,就可以通过tbody.rows[0].cells[0]来引用新插入的单元格,因为新创建的单元格被插入到了这一行的位置0上。
总之,使用这些属性和方法创建表格的逻辑性更强,也更容易看懂,尽管技术上这两套代码都是正确的。


想要了解更多Java基础知识,可以点击评论区链接和小编一起学习java吧,此视频教程为初学者而著,零基础入门篇!给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili

我们都知道普通的HTML自带的功能相对有限,很多复杂的交互式场景,如果手动去写功能的话会非常的复杂,而且可扩展性差,就拿HTML表格来说,对于初学者或者对于复杂的拖拽式交互编程不熟悉的话会很浪费时间,因此今天就介绍一个第三方的插件——Table-draagger,来轻松实现类似的功能。Table-draagger是用于构建可重排序的拖放表的极简主义纯Javascript库!



Github

https://github.com/sindu12jun/table-dragger


特征

Table-draagger因为其以下几个特征而让拖拽和排序的实现变得如此简单:

  • 非常容易配置
  • 能够同时对列或行进行排序
  • 排序时动画流畅
  • 没有臃肿的依赖
  • 提供触摸事件(意味着在触摸设备可以实现一些你想要的功能)


安装使用

  • 安装

可以在npm上获得它:

npm install table-dragger --save

或者引用压缩的js文件

<script src="../node_modules/table-dragger/dist/table-dragger.min.js"></script>

或者尝试开发中的不稳定版本

npm install table-dragger@next --save

  • 快速入门

请看以下代码:

import tableDragger from 'table-dragger'
tableDragger(el, options?)

<table id="table">
<thead>
<tr>
<th class='handle'>header1</th>
<th class='handle'>header2</th>
</tr>
</thead>
<tbody>
<tr>
<td>conten1</td>
<td>conten2</td>
</tr>
</tbody>
</table>

var el = document.getElementById('table');
var dragger = tableDragger(el, {
mode: 'row',
dragHandler: '.handle',
onlyBody: true,
});
dragger.on('drop',function(from, to){
console(from);
console(to);
});

你可以在不设置任何参数的情况下使用默认的拖拽和排序方式,当然以下是你可以配置的选项:

  • options.mode

1、将mode设置为column,用户拖动和排序表的列

2、将mode设置为row,用户拖动并排序表的行

3、设置mode为free,用户根据点击后鼠标移动的方向拖动行或列。注意,必须在自由模式下指定dragHandler。

  • options.dragHandler

dragHandler是表中的拖动句柄选择器默认情况下,在列模式下,dragHandler是表的第一行;在行模式下,则是第一列。

  • options.onlyBody

在行模式下将onlyBody设置为true时,用户只能在tbody中提升行。

  • API

下面是返回对象的API


tableDragger(document.querySelector('#event-table'), { mode: 'free', dragHandler: '.handle', onlyBody: true })
.on('drag', () => {
console.log('drag');
})
.on('drop', (from, to, el, mode) => {
console.log(`drop ${el.nodeName} from ${from} ${mode} to ${to} ${mode}`);
})
.on('shadowMove', (from, to, el, mode) => {
console.log(`move ${el.nodeName} from ${from} ${mode} to ${to} ${mode}`);
})
.on('out', (el, mode) => {
console.log(`move out or drop ${el.nodeName} in mode ${mode}`);
});


总结

Table-draagger为我们节省了很多手动封装表格排序和拖拽功能的时间,当然目前很多第三方框架已经实现了类似的功能,这更适用于原生的html表格,你还可以通过一些手段记忆用户拖拽,这只是其中一种思路,Enjoy it!~

过昨天的学习算是对HTML有了一点点了解,知道了什么是前端,什么是HTML、前端三大标准、主流浏览器和html的基本结构及常用标签。那么今天继续看看html还有什么新的知识吧。

特殊字符(了解即可)

有常见性就有特殊性,我们使用电脑时经常会用到空格键,在html文档上有时也会使用到空格键等等,那怎么在html上又是以什么形式展示给浏览器解析呢?

浏览器显示结果

特殊字符名称

HTML编辑字符


空格

& n b s p;

<

小于号

& l t ;

>

大于号

& g t;

&

& a m p;

©

版权

& c o p y ;

表格标签

作用:在浏览器上清晰美观地显示、展示数据。

表格标签的语法

<table>

<tr>

<td></td>

</tr>

</table>

表格标签:<table></table>,一个table标签中可嵌套多个tr标签。

行标签:<tr></tr>,一个tr标签代表一行。一个行标签中可以嵌套多个单元格标签。

单元格标签:<td></td>,一个td标签代表一个单元格。在单元格中可以填充文本、图片、超链接等等内容。

在html中表格不是由横线划分行和列,而是大大小小的矩形盒子来划分。Table是一个最大的矩形盒子,里面包含tr标签,这个是一个和table长度差不多的矩形盒子,table一行仅容纳一个tr盒子。在tr盒子中还包含有N个td盒子,td盒子就是单元格。

表格示例:

在html文档中编辑表格标签结构时,除了一个标签一个标签地敲之外,可以使用快捷方式快速操作:如五行三列的表格,可以在table标签中输入:“tr*5>td*3”然后敲回车,就将其表格结构迅速展现出来。

<h1>表格示例:</h1>
<table>
        <tr>
            <td>姓名</td>
            <td>性别</td>
            <td>年龄</td>
        </tr>
        <tr>
            <td>张三丰</td>
            <td>男</td>
            <td>27</td>
        </tr>
        <tr>
            <td>李四喜</td>
            <td>女</td>
            <td>18</td>
        </tr>
        <tr>
            <td>王五通</td>
            <td>男</td>
            <td>35</td>
        </tr>
        <tr>
            <td>秦六夏</td>
            <td>女</td>
            <td>30</td>
        </tr>
</table>

运行界面示例:默认状态下表格是没有线条分界,表格对齐方式左对齐。

表头单元格标签

<th></th>:位于表格的第一行或第一列,可以使其内容加粗居中显示。

语法:

<table>

<th>

<td></td>

</th>

</table>

表头表格代码示例:

<h1>表头表格示例:</h1>
   <table>
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr>
            <td>张三丰</td>
            <td>男</td>
            <td>27</td>
        </tr>
        <tr>
            <td>李四喜</td>
            <td>女</td>
            <td>18</td>
        </tr>
        <tr>
            <td>王五通</td>
            <td>男</td>
            <td>35</td>
        </tr>
        <tr>
            <td>秦六夏</td>
            <td>女</td>
            <td>30</td>
        </tr>
    </table>

运行界面示例:

表格结构标签

表格结构标签分为表格头部标签表格主体标签。类似于head标签和body标签对于html标签之间的关系。

表格头部标签:<thead></thead>。定义表格头部,嵌套在<table></table>中,一般位于第一行。

表格主体标签:<tbody></tbody>。定义表格主体,嵌套在<table></table>中,主要用于显示数据。

代码示例:

<h1>表格结构标签</h1>
    <table border="1" width="300px" height="150px" cellspacing="0">
        <thead>
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>张三丰</td>
                <td>男</td>
                <td>36</td>
            </tr>
            <tr>
                <td>李四喜</td>
                <td>女</td>
                <td>30</td>
            </tr>
        </tbody>
    </table>

运行界面:

表格属性

虽然表格属性在实际开发过程中不常使用,一般都是通过CSS样式设置,但是还是需要记住这些属性关键词,在css中属性关键词也会用到。

注:这些属性都要写在table标签的开始标签中,多个属性之间需要使用空格分隔。

align:表格的对其方式。

align=“left”:在浏览器中居左显示。也是默认显示。

align=“center”:在浏览器中居中显示。

align=“right”:在浏览器中居右显示。

border:表格是否具有边框。

border=”1”:表格添加边框。

cellpadding:单元格内的元素和td边框的距离。

举个例子,如果表格是一件教室的话,桌子就是单元格,桌子上放的书本就是单元格内的元素,书本边缘和桌子边缘之间产生的空白区域就是cellpadding的值。

cellspacing:单元格和单元格之间的距离。默认是有空隙的,可设置为零,使其空隙清零,成为一条直线。

还是以教室为表格,桌子为单元格。桌子和桌子之间的距离就是cellspacing的值。

width:表格的宽度,属性值可以是像素值也可以是百分比。

height:表格的高度,属性值可以是像素值也可以是百分比。

代码示例:

<h1>表头表格示例:</h1>
    <table align="center" border="1" cellpadding="0" cellspacing="0" width="200px" height="300px">
        <tr>
            <th>姓名</th>
            <th>性别</th>
            <th>年龄</th>
        </tr>
        <tr>
            <td>张三丰</td>
            <td>男</td>
            <td>27</td>
        </tr>
        <tr>
            <td>李四喜</td>
            <td>女</td>
            <td>18</td>
        </tr>                   
        <tr>
            <td>王五通</td>
            <td>男</td>
            <td>35</td>
        </tr>
        <tr>
            <td>秦六夏</td>
            <td>女</td>
            <td>30</td>
        </tr>
    </table>

运行界面:

合并单元格

合并单元格是指将两个或两个以上的单元格合并成一个单元格。合并属性一般写在单元格标签的开始标签上。合并代码属性设置后,要将没有写合并的单元格代码的其他合并单元格标签删除掉。

目标单元格:(合并代码存在位置)

跨行合并:最上侧单元格为目标单元格,写合并代码。

跨列合并:最左侧单元格为目标单元格,写合并代码。

合并单元格的方式:

跨行合并:将处于不同行的单元格进行合并

语法:rowspan=“合并单元格个数”

代码示例:

<h1>跨行合并表格:</h1>
    <table border="1" width="300px" height="150px" cellspacing="0">
        <tr>
            <td rowspan="2"></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </table>

运行界面:

跨列合并:将处于不同列的单元格进行合并

语法:colspan=“合并单元格个数”

代码示例:

<h1>跨列合并表格:</h1>
    <table border="1" width="300px" height="150px" cellspacing="0">
        <tr>
            <td colspan="2"></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
        <tr>
            <td></td>
            <td></td>
            <td></td>
        </tr>
    </table>

运行示例:

今天学习的表格内容就到这里了,明天开始学习列表。