DOMUtils Test
撰写时间:2025-02-11
修订时间:2025-04-05
为便捷生成各种DOMs提供便利工具。
便捷生成表格
使用二维数组来表示多行数据。
将标题数据与主体数据分离至不同的数组中,可解决HTML的表格格式代码与数据耦合度过高的问题,从而让我们专注于表格数据的独立变化。
单元格的跨行及跨列
表格单元格的跨行及跨列耦合度更高,且会引起后续行或列的连锁反应。编写跨行或跨列的表格代码往往成为一个噩梦。
跨列: 影响到当前行当前列的后面的列。colspan的值表示当前单元格共占多少列。
跨行: 影响到当前列的下面的行。rowspan的值表示当前单元格共占多少行。
A | B | C | D | E | F |
---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 |
2 | 2 | 3 | 4 | 5 | |
3 | 2 | 3 | 4 | 5 | 6 |
4 | 2 | 3 | 4 | 5 | 6 |
5 | 2 | 3 | 4 | 5 | |
6 | 2 | 3 | 4 | 5 | 6 |
为解决此问题,可在上节的基础上,将跨行或跨列的需求以特定的格式编写进相应的数组中。
使用[data, row, col]
的形式来指定需要跨行或跨列的情况,data表示单元格内容,row表示跨多少行,col表示跨多少列。
因此,['string', 0, 2]
表示单元格内容为string
,跨2列;[4, 2]
表示单元格内容为4,跨2行。
这样可达到非常直观的效果。以后若要修改所跨的行列也更加便捷。
将多行拆分为多列显示
有时,表格的行太多而列太少,为充分利用水平方向上的空间,可考虑分成多列显示,即,将一些过长的行剪下来,放至右边而成为并排的列。
依先排列还是先排行,分为列优先及行优先两种方式。
列优先
将一个15行的表格,转变为每行显示4组数据,从而同时兼顾了美观及空间的需求。
上述效果为列优先 (column majored)的方式,即先在垂直方向上按顺序显示一部分行的数据,再添加新列并按顺序显示另一部分行的数据,直至最后一行数据。
行优先
下面实现行优先 (row majored),即先确定每行共有多少列,再按原数组的顺序逐行往下排。
手工指定切割行的范围
如果数据有内在规律,则可手工指定各行的边界。
第一列组有效数位为1位,第二列组有效数位为2位,第三列组有效数位为3位,第四列组有效数位为4位。
这种方式,仍为列优先,但左边的列无须填满即可另起新列。
Node.insertAfter
编写代码
在DOM中,Node只有insertBefore方法,没有insertAfter方法。DomUtils将直接在Node的原型上添加此方法。
上面最后一行代码也可改写为:
但这里由于调用者均为同一对象,因此没必要。
需注意的是,上面代码不能使用lambda的形式:
在采用lambda的形式中,this将指向调用此方法时所在环境的对象,而不是Node对象。
测试
下面测试客户端调用。第一种情况,如果insertElement为空值时:
This is the only child node.
此时抛出异常,与Node.insertBefore方法的逻辑一致,正确。
第二种情况,如果referenceElement为空值时:
This is the only child node.
此时将新元素插入为父节点的最后一个节点,与Node.insertBefore方法的逻辑一致,正确。
第三种情况,当两个参数均不为空值时:
p1
p2
p3
3个新节点均正确地插入到相应的节点之后。
AppendCSSFile
AppendCSSFile将一个CSS文件添加到head标签,或ShadowRoot。
This is a sample paragraph.
在DOMTree中应可看到所添加的CSS文件,被插入到script或style标签(若有)之前。