当前位置: 首页 > news >正文

为Web页中的Table对象创建一个映射表

    HTML对象中的TABLE是我们常用的网页元素,在DHTML编程中,我们可以通过它的rows和cells方法方便的访问表格对象里面的每一个单元格,而且表格对象(table)的每个单元行(tr)和每个单元格(td)分别又有自己的rowIndex和cellIndex属性。

    使用上面提到的表格对象特性,当我们要在表格的横向或纵向浏览单元格的时候,似乎可以非常的简单,比如纵向浏览一个column里的单元格,我们只用:

< script  language ="javascript" >
function BrowerColumn(tbl, col)
{
    
for ( var i=0 ; i < tbl.rows.length ; ++i )
    
{
        
var cell = tbl.rows(i).cells(col);
        
// do something with cell
    }
  
}

</ script >

就可以了,如果是横向浏览更加简单,只需要使用td的nextSibling和previousSibling属性就行了。

    说了半天,似乎还没有说到给TABLE建立什么映射的事情哦,上面说到的表格单元格浏览的情况确实是可行的,可是它却只能解决规则的表格对象,什么是规则 的表格对象呢?就是说表格的每个单元格的colSpan和rowSpan必须都分别相同,当然默认的都是1了,否这纵向浏览将会crash

    我们知道表格里面合并单元格的方法是使用xxxSpan,然后在合并方向上的cell会根据合并的宽度被移去xxxSpan- 1(xxxSpan>1)个。这都是我们清楚的(如果你不清楚,说明这篇文章不适合你阅读),可是在行上合并了以后,cell的cellIndex 的值仍然是连续的,这就出问题了,像下面的这个表格单元格的每个cell的cellIndex居然成了这些值@_@:

   

    我们如果再使用文章开始那段代码去纵向浏览这个表格的单元格,那么将会死的很难看。于是我们可以先给表格创建一个cell到colCount*rowCount这样一个矩阵的映射,然后我们在那个二维矩阵中去浏览单元格就会非常简单,不管是纵向还是横向(不过横向浏览仍然建议使用xxxSibling属性)。建立的矩阵效果如图:

     
    这样我们就可以在这个tableMap上方便的纵向浏览了

    我们为什么要纵横浏览表格的单元格呀??当我们在做一些表格中的highlighting的时候,这是经常需要使用的方法,当然这个表格的纵横浏览还是我下面要说的'使用方向键在输入框矩阵中自然的导航'的基础。

    附表格单元格映射矩阵代码:

< script  language ="javascript" >
function CreateTableMapping(tbl)
{
    
if ( !tbl.rowCount )
    
{
        
var tableMap = [];
        
var colCount = 0;
        
for ( var i=0 ; i < tbl.rows(0).cells.length ; ++i )
        
{
            colCount 
+= tbl.rows(0).cells(i).colSpan;
        }

        tbl.colCount 
= colCount;
        tbl.rowCount 
= tbl.rows.length;
        
for ( var i=0 ; i < tbl.rows.length ; ++i )
        
{
            
var ary = new Array(colCount);
            
for ( var j=0 ; j < colCount ; ++j )
            
{
                ary[j] 
= true;
            }

            tableMap.push(ary);
        }

        
for ( var i=0 ; i < tbl.rowCount ; ++i )
        
{
            
var cellIndex = 0;
            
for ( var j=0 ; j < colCount ; j += currentCell.colSpan )
            
{
                
if ( tableMap[i][j] )
                
{
                    
var currentCell = tbl.rows(i).cells(cellIndex++);
                    
for ( var m=i ; m < i+currentCell.rowSpan ; ++m )
                    
{
                        
for ( var n=j ; n < j+currentCell.colSpan ; ++n )
                        
{
                            tableMap[m][n] 
= false;
                        }

                    }

                    tableMap[i][j] 
= currentCell; 
                 }

            }

        }

        tbl.tableMap 
= tableMap;
    }

}

</ script >

转载于:https://www.cnblogs.com/lhgstudio/p/3560977.html

相关文章:

  • 基于V4L2的视频驱动开发(2)
  • IMP-00017: 由于 ORACLE 的 20001 错误
  • java中的内部类
  • [IE9] IE9 Beta崩溃问题解决方案
  • ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
  • 总结程序设计几大原则
  • 使用tcpdump抓取HTTP包
  • 客户端的测试
  • 云存储离我们还有多远?
  • CDbConnection failed to open the DB connection
  • 读入图像文件并显示【C#图像处理学习笔记】
  • 分页存储过程(三)
  • 禁用Dropbear中DNS反向查询连接客户端地址补丁
  • Windows Phone开发(29):隔离存储C
  • 马宁的Windows Phone 7开发教程(3)——XNA下使用MessageBox和软键盘
  • 【node学习】协程
  • CSS 专业技巧
  • Hibernate最全面试题
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java 最常见的 200+ 面试题:面试必备
  • k8s如何管理Pod
  • Linux快速复制或删除大量小文件
  • Nodejs和JavaWeb协助开发
  • Object.assign方法不能实现深复制
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python socket服务器端、客户端传送信息
  • SAP云平台里Global Account和Sub Account的关系
  • Spring-boot 启动时碰到的错误
  • SwizzleMethod 黑魔法
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 订阅Forge Viewer所有的事件
  • 关于List、List?、ListObject的区别
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 计算机在识别图像时“看到”了什么?
  • 码农张的Bug人生 - 见面之礼
  • 模型微调
  • 如何选择开源的机器学习框架?
  • 说说动画卡顿的解决方案
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • $.ajax()
  • ${ }的特别功能
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (arch)linux 转换文件编码格式
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计ssm电影分享网站
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十六)串口UART
  • (四)Android布局类型(线性布局LinearLayout)
  • (四)linux文件内容查看
  • (一)Java算法:二分查找
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?