原生js封装table表格操作,获取任意行列td,任意单行单列方法

V1.001更新增加findTable-min.js 本次更新,优化了代码性能方面,增加了部分新功能,可以获取多个table表格批量操作。

考虑到本人后面的项目中可能涉及到大量的表格操作,提前先封了 一个简单的操作方法,日后再加完善,但对于小页面需求是完全够 用的。该方法很强大。

f(elm,boolean).getTableXY(x,y,type)

elm传入表格选择器 如果不传,默认查找table标签, 使用的是querySelector()和querySelectorAll()选择器 请注意兼容性。

boolean。选择取页面第一个还是取页面所有符合条件的table数组 默认为false,查找页面第一个符合条件的元素。可选。

x:表示第几行tr

y:表示第几列td

type:[“all” || “tr” || “td”] all:获取精确地td对象,第x行,第y列 (4,7,‘all’) tr:获取第x行整行tr。(1,‘tr’) 此处y参数可省略。 td:获取第y列整列td。(3,‘td’) 此处x参数可省略 该方法返回原生DOM对象或原生DOM对象数组  

下面给大家分享js源码。  

0/***
1 
2表格操作插件 V1.001
3表格操作插件 V1.002
4 1.修复传参传入null的错误
5 2.修复给每个td绑定传入错误,应该循环数组
6 3.给f()返回的数组绑定方法,可以直接调用
7 4.修复部分BUG
8Mr.chen
9 
10***/
11var f = function(tab,flag){
12 
13 var findTable = {},
14 f = findTable,
15 tabArr = [];
16 
17 if(tab == true || tab == 'true'){
18 
19 tab = 'table';
20 
21 flag = true;
22 
23 }else{
24 
25 tab = tab;
26 
27 }
28 
29 //判断是获取单个还是获取所有,最后都要装进数组
30 if(flag){
31 
32 f.table = document.querySelectorAll(tab);
33 
34 for(var o = 0; o < f.table.length; o += 1){
35 
36 tabArr.push(f.table[o]);
37 
38 }
39 
40 }else{
41 
42 tab = tab || 'table';
43 
44 f.table = document.querySelector(tab);
45 
46 f.table.length = 1;
47 
48 tabArr.push(f.table);
49 
50 }
51 
52 for(var p = 0; p < tabArr.length; p += 1){
53 
54 actionTable(tabArr[p]);
55 
56 }
57 
58 //给数组直接绑定方法
59 f.table.getTableXY = function(x,y,type){
60 
61 var tableAllArr = [],
62 temp = parameter(x,y,type);
63 
64 x = temp.x;
65 
66 y = temp.y;
67 
68 type = temp.type;
69 
70 
71 if(tabArr.length == 1){
72 
73 return actionTable(tabArr[0]).getTableXY(x,y,type);
74 
75 }else{
76 
77 for(var p = 0; p < tabArr.length; p += 1){
78 
79 tableAllArr.push(actionTable(tabArr[p]).getTableXY(x,y,type));
80 
81 }
82 
83 return tableAllArr;
84 
85 }
86 
87 }
88 
89 function actionTable(obj){
90 
91 var f = obj;
92 
93 //获取当前table所有tr,td,th
94 f.refreshTable = function(){
95 
96 f.tableTr = obj.querySelectorAll('tr');
97 
98 f.tableTd = obj.querySelectorAll('td');
99 
100 f.tableTrLength = f.tableTr.length;
101 
102 f.tableTdLength = f.tableTd.length;
103 
104 };
105 
106 f.refreshTable();
107 
108 //给所有td绑定唯一标识
109 f.tableCard = function(){
110 
111 var i = 0,k = 0,
112 everyTrChild,
113 everyTrChildLength;
114 
115 //可能对table做出增删操作,重新获取,
116 f.refreshTable();
117 
118 for(i; i < f.tableTrLength; i += 1){
119 
120 //为每一个td绑定独立ID
121 f.bindXY(f.tableTr[i],i);
122 
123 }
124 
125 };
126 
127 //为每一个td绑定独立ID
128 f.tableTdArr= [];
129 
130 f.bindXY = function(tr,i){
131 
132 var td = tr.querySelectorAll('td'),
133 tdLen = td.length;
134 
135 for(var n = 0; n < tdLen; n += 1){
136 
137 td[n].tableX = i;
138 
139 td[n].tableY = n;
140 
141 td[n].tableXY = [i,n];
142 
143 f.tableTdArr.push(td[n]);
144 
145 }
146 
147 };
148 
149 f.tableCard();
150 
151 
152 //获取元素方法
153 f.getTableXY = function(x,y,type){
154 
155 var temp = parameter(x,y,type);
156 
157 x = temp.x;
158 
159 y = temp.y;
160 
161 type = temp.type;
162 
163 //取出精确坐标
164 if(type && type == 'all' || (x && y && y != 'all' && !type)){
165 
166 type = 'all';
167 
168 return f.eachTable(x,y,type);
169 
170 }else{
171 
172 return f.eachTable(x,y);
173 
174 }
175 
176 };
177 
178 //循环比较找出符合条件的元素
179 f.eachTable = function(x,y,type){
180 
181 if(type && type == 'all'){
182 
183 for(var i = 0; i < f.tableTdArr.length; i += 1){
184 
185 
186 if(x == f.tableTdArr[i].tableXY[0] && y == f.tableTdArr[i].tableXY[1]){
187 
188 f.success = f.tableTdArr[i];
189 
190 break;
191 
192 }
193 
194 }
195 
196 }
197 
198 if(y == 'tr'){
199 
200 for(var n = 0; n < f.tableTdArr.length; n += 1){
201 
202 if(x == f.tableTdArr[n].tableX){
203 
204 f.success = f.tableTdArr[n].parentNode;
205 
206 break;
207 
208 }
209 
210 }
211 
212 }
213 
214 if(y == 'td'){
215 
216 f.success = [];
217 
218 for(var m = 0; m < f.tableTrLength; m += 1){
219 
220 var tbtr = f.tableTr[m].querySelectorAll('td');
221 
222 //console.log(tbtr);
223 
224 for(k = 0; k < tbtr.length; k += 1){
225 
226 if(x == tbtr[k].tableY){
227 
228 f.success.push(tbtr[k]);
229 
230 continue;
231 }
232 
233 }
234 
235 }
236 
237 }
238 
239 return f.success;
240 
241 };
242 
243 return f;
244 
245 }
246 
247 
248 //参数处理
249 function parameter(x,y,type){
250 
251 //避免出现 0 == false
252 if(x == 0){
253 
254 x = '0';
255 
256 }
257 
258 if(y == 0){
259 
260 y = '0';
261 }
262 
263 if(y == null && type == 'tr'){
264 
265 y = type;
266 
267 }
268 
269 if(x == null && type == 'td'){
270 
271 x = y;
272 
273 y = type;
274 
275 }
276 
277 return {
278 x : x,
279 y : y,
280 type : type
281 }
282 
283 }
284 
285 return f.table;
286 
287};
288 
289 

  js包下载地址 点击在线运行 欢迎大家补充,一起探讨!    

 

查看原文-摘自大公爵ddamy.com

转载于:https://www.cnblogs.com/webhb/p/5755741.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring陷阱:事务测试被认为是有害的

Spring杀手级功能之一是容器内集成测试 。 尽管EJB多年来一直缺乏此功能&#xff08;Java EE 6终于解决了这个问题&#xff0c;但是我还没测试过&#xff09;&#xff0c;但是Spring从一开始就允许您从Web层开始&#xff0c;通过所有服务来测试整个堆栈。到数据库的方式。 数据…

python xlwt写入已有表_Python中,添加写入数据到已经存在的Excel文件

1.安装xlrd、xlwt、xlutilshttps://pypi.org/project/xlutils/pip安装&#xff1a;cmd下输入&#xff1a;pip install xlrd #读取exclepip install xlwt #写入exclepip install xlutils #操作 Excel 文件的实用工具&#xff0c;如复制、分割、筛选等2.代码主要部分实现import x…

java线程“生产/消费”模型2

/* 资源类 */ class ShareValue {private int total;//判断对象是否为空private boolean isEmptytrue;//判断对象是否已满private boolean isFulltrue;public ShareValue(int total) {this.total total;if(total>0) isEmptyfalse;if(total<1000) isFullfalse;}/** sync…

linux更改用户名_破旧安卓手机第二春,在安卓手机上使用Linux_deploy运行Linux

由于服务器位于国外&#xff0c;害怕被墙掉导致数据丢失&#xff0c;所以在本地写了脚本每小时从服务器上导出并下载到本地。但是电脑不可能二十四小时开机&#xff0c;所以很想买一个树莓派4玩玩。但是太贵辽&#xff0c;还好搜索到了Android运行Linux的方法&#xff0c;下面记…

关于Cocos2d-x中init方法和onEnter方法的区别

init()和onEnter()这两个方法都是写实例化对象的类(比如继承自Node的一些类等等)的时候用到的方法。 一般都是public类型下面的 bool init(); void onEnter(); 两个方法在实现的时候都要先执行父类方法&#xff0c;比如 Node::init(); Node::onEnter(); 注意&#xff1a; 1.ini…

在5分钟内在MacOSX Lion中设置JAVA_HOME,MAVEN_HOME,ANT_HOME

人们一直试图通过Mac上的Java开发世界来解决这个问题&#xff0c;这一直是我一直遇到的问题。 他们必须解决的第一件事就是设置适当的工具和环境。 幸运的是&#xff0c;足够多的MacOSX &#xff08;Lion或以前的版本&#xff09;仍然有许多重要的工具可用于Java开发&#xff0…

MCUXpress IDE常用设置

NXP的开发工具Xpress是基于eclipse制作的&#xff0c;我们如果需要设置一些东西可以直接搜索eclipse是怎么设置的。 1、字体大小 搜索eclipse字体大小&#xff0c;菜单Window > Preference 而Xpress是汉化了的&#xff0c;英语不好的同学可能懵逼&#xff0c;其实就是菜单栏…

C语言中空格符、空字符、字符数组结束符、换行、回车的区别

空格符和空字符是不一样的,在ASCII里面,空格(space)符号的ASCII码是32,而空字符是0, 2个是完全不一样的2个字符 空字符 一般来描述一个字符串的结尾,其实是控制符的一种,但不能理解为没有字符,应该理解为代表什么都没有的字符.好比回车0x0A和换行0x0D虽然不显示,但是也是控制字…

hdu5823 (附带数的二进制子集)

二进制数子集的取法,结果不会输出0&#xff0c;且从大到小 for(int i0 i;i0;i0(i0-1)&i)cout<<i0<<endl; 题意&#xff1a; 给定一个 N个点的图&#xff0c; 求它的每一个子图的最小染色数 染色方法是所有子图中相连接两点颜色不一致 其中 N≤18 题解&…

anaconda如何卸载库_小白必看!Anaconda安装全攻略

本文作者&#xff1a;戴 雯文字编辑&#xff1a;方 言技术总编&#xff1a;张馨月爬虫俱乐部云端课程来袭&#xff01;爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营&#xff0c;主要是为了让学员掌握Stata软件进阶操作&#xff0c;涉及…

RESTful Web服务可发现性,第4部分

这是有关使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web Service的系列文章的第四篇 。 本文将重点介绍REST API&#xff0c;HATEOAS的可发现性以及由测试驱动的实际方案。 引入REST可发现性 API的可发现性是一个值得引起足够关注的主题&#x…

10位IT领袖给应届毕业生的10条忠告

10位IT领袖给应届毕业生的10条忠告&#xff0c;在走向独立和自主的伟大征程中&#xff0c;吸取他们的经验。 在毕业生们迈出象牙塔之时&#xff0c;他们应该听从哪些人的建议&#xff1f;在走向独立和自主的伟大征程中&#xff0c;他们该吸取哪些教训&#xff1f;听一听各领域…

ubuntu安装好后常用软件安装和配置

1、安装vim sudo apt install vim 安装好后进入路径打开vimrc文件&#xff0c;这里需要注意一定要用sudo不然编辑后无法保存&#xff01; cd /etc/vim sudo vim vimrc 在最下面加入 set nu set ts4 set softtabstop4 set shiftwidth4 set expandtab set autoindent 依次是…

Objective-c 数据类型

这里列出Objective-c中独有数据类型&#xff1a; 一、字符串 在Objective-c中&#xff0c;字符串常量是由和一对从引号括起的字符串序列。比如&#xff1a;"China"、"objective-c"等都是合法的字符串常量。 二、id类型 id类型是Objective-c中一个比较独…

JBoss AS 7 EJB3池配置

现在&#xff0c;AS 7.0.1已经发布&#xff0c;让我们看一下可用的EJB3新功能。 就像我在上一篇文章中提到的那样 &#xff0c;AS 7.0.1现在允许您为无状态会话bean和MDB配置池。 当前&#xff0c;我们允许在子系统级别配置池&#xff0c;这意味着该池将适用于服务器上部署的所…

iOS开发网络篇—文件的上传

说明&#xff1a;文件上传使用的时POST请求&#xff0c;通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。 由于过程较为复杂&#xff0c;因此本文只贴出部分关键代码。 主控制器的关键代码&#xff1a; YYViewController.m 1 #import…

var模型的matlab实现_Eviews中VAR模型的操作、脉冲响应分析和方差分解的实现

打开文件所在位置&#xff0c;获取数据。选中变量右键open打开var操作EViews,在VAR对象的工具栏中选择“View”|“Lag Structure”|“AR Roots Table/ AR Roots Graph”选项&#xff0c;得到AR根的表和图。结果显示&#xff1a;VAR模型所有根模的倒数都小于1&#xff0c;即都在…

一个程序员的爱情表白书

我能抽象出整个世界 但是我不能抽象出你 因为你在我心中是那么的具体 所以我的世界并不完整 我可以重载甚至覆盖这个世界里的任何一种方法 但是我却不能重载对你的思念 也许命中注定了 你在我的世界里永远的烙上了静态的属性 而我不慎调用了爱你这个方法 当我义无返顾的…

结构体、枚举类型

一、结构体 结构体&#xff1a;就是一个自定义的集合&#xff0c;里面可以放各种类型的元素&#xff0c;用法大体跟集合一样。 1、定义的方法&#xff1a; struct student { public int nianling; public int fenshu; public string name; public string sex; public int sum; …

NXP KW38开发杂记(一)MCUXpress 运行进入NMI_Handler

这里是大佬的具体分析过程&#xff0c;感兴趣可以看看 https://www.cnblogs.com/wenhao-Web/p/13618703.html 解决办法&#xff1a; 在startup_mkw38a4.c文件里&#xff0c;定位到Flash_Config {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFE}; 把最后一个参数0xFFFFFFFE改…