說明:1.選擇一個白色單元格2.點擊插入Button
源碼如下:TestTable.html
>>> 此段代碼依賴於 jquery.js <<<
<html> <head> <mce:style type="text/css"><!-- td.header{background-color:blue;} --></mce:style><style type="text/css" mce_bogus="1">td.header{background-color:blue;}</style> <mce:script src="./jquery.js" mce_src="jquery.js" type="text/javascript"></mce:script> <mce:script type="text/javascript"><!-- var hidSelectedRowIndex; var hidSelectedCellIndex; $(document).ready(init); function init(){ $("td",myTab).each(function(i){ this.onclick = __onclick__; }); } function __onclick__(){ if ($(this).attr("class") == 'header'){ hidSelectedRowIndex = null; hidSelectedCellIndex = null; }else{ hidSelectedRowIndex = this.parentElement.rowIndex; hidSelectedCellIndex = this.cellIndex; } } function doInsertRow(objTable){ if (hidSelectedRowIndex != undefined){ for (j=hidSelectedRowIndex; j>-1; j--){ $("td",objTable.rows[j]).each(function(index){ var rowSpanOfTD = $(this).attr("rowSpan"); // rev1.00 //if(rowSpanOfTD > 1 // && hidSelectedRowIndex >= this.parentElement.rowIndex // && hidSelectedRowIndex <= (this.parentElement.rowIndex + rowSpanOfTD -1)){ // $(this).attr("rowSpan",rowSpanOfTD+1); //} // rev1.01 if(($(this).attr("class") == 'header' || rowSpanOfTD > 1) && hidSelectedRowIndex >= this.parentElement.rowIndex && hidSelectedRowIndex <= (this.parentElement.rowIndex + rowSpanOfTD -1)){ $(this).attr("rowSpan",rowSpanOfTD+1); } }); } var oTR = objTable.insertRow(hidSelectedRowIndex+1); var rowSpanCells = $("td",objTable.rows[hidSelectedRowIndex]).filter(function(index) { // rev1.00 //return (($(this).attr("rowSpan")) ==1); // rev1.01 return (($(this).attr("class")) != 'header'); }); var cellCount = rowSpanCells.length; for (i=0; i< cellCount; i++ ){ var oTD = rowSpanCells[i].cloneNode(true); oTD.οnclick=__onclick__; oTR.insertBefore(oTD); } } } function doInsertColumn(objTable){ if(hidSelectedCellIndex != undefined){ var cellIndexByMinimumGrain = calcCellIndexByMinimumGrain(objTable); var rowCount = objTable.rows.length; for(var k=0; k < rowCount; k++){ var actualCellIndex = calcActualCellIndex(objTable,k,cellIndexByMinimumGrain); var oTR = objTable.rows[k]; var offset_index = 0; var loopCount = Math.min(actualCellIndex,oTR.cells.length-1); for (var l=0;l <= loopCount; l++){ offset_index = offset_index + oTR.cells[l].colSpan -1; if(actualCellIndex >= l && actualCellIndex <= l+offset_index){ if(oTR.cells[l].colSpan >1){ oTR.cells[l].colSpan = oTR.cells[l].colSpan +1; }else{ var oTD = oTR.cells[l].cloneNode(true); oTD.οnclick=__onclick__; oTR.insertBefore(oTD,oTR.cells[l]); } } } } } } function calcCellIndexByMinimumGrain(objTable){ var baseCellIndexForInsert = hidSelectedCellIndex; for (var j=hidSelectedRowIndex; j>-1; j--){ $("td",objTable.rows[j]).each(function(index){ var rowSpanOfTD = $(this).attr("rowSpan"); if( rowSpanOfTD > 1 && hidSelectedRowIndex > this.parentElement.rowIndex && hidSelectedRowIndex <= (this.parentElement.rowIndex + rowSpanOfTD -1)){ baseCellIndexForInsert = baseCellIndexForInsert + 1; } if (j==hidSelectedRowIndex){ var colSpanOfTD = $(this).attr("colSpan"); if ( colSpanOfTD > 1) { baseCellIndexForInsert = baseCellIndexForInsert + colSpanOfTD - 1; } } }); } return baseCellIndexForInsert; } function calcActualCellIndex(objTable,rowIndex,cellIndex){ var baseCellIndexForInsert = cellIndex; for (var j=rowIndex; j>-1; j--){ $("td",objTable.rows[j]).each(function(index){ var rowSpanOfTD = $(this).attr("rowSpan"); if( rowSpanOfTD > 1 && rowIndex > this.parentElement.rowIndex && rowIndex <= (this.parentElement.rowIndex + rowSpanOfTD -1)){ baseCellIndexForInsert = baseCellIndexForInsert - 1; } }); } return baseCellIndexForInsert; } // --></mce:script> </head> <body> <pre> 說明: 1.選擇一個白色單元格 2.點擊插入Button </pre> <input type="button" value="insert row" onClick="doInsertRow(myTab)"> <input type="button" value="insert column" onClick="doInsertColumn(myTab);"> <table border="1" id="myTab"> <tr> <td class="header" >CH1</td><td class="header" >CH2</td><td class="header" >CH3</td> </tr> <tr> <td class="header" ROWSPAN="3" >RH1</td><td >11</td><td >12</td> </tr> <tr> <td >21</td><td >22</td> </tr> <tr> <td >31</td><td >32</td> </tr> <tr> <td class="header" COLSPAN="3">RH2</td> </tr> <tr> <td class="header" ROWSPAN="2" >RH3</td><td >41</td><td >42</td> </tr> <tr> <td >51</td><td >52</td> </tr> <tr> <td class="header" >RH4</td><td colSpan=2">61</td> </tr> </table> </body> </html>
先把倉庫克隆到本地,我這邊還需要改cmake環境,在project上面加 set(CMAKE_CUDA_COMPILER /usr/local/cuda-11.8/bin/nvcc) 構建 mkdir build cmake -B bui
WPF編程-Prism 世有伯樂,然後有千里馬。千里馬常有,而伯樂不常有。 一、背景 Winform和WPF 1. WinForms和WPF 技術架構: WinForms是基於傳統的窗體和控件的技術,使用的是類
前言 做過.NET控制檯應用程序的同學應該都知道原生的.NET控制檯應用程序輸出的內容都比較的單調,假如要編寫漂亮且美觀的控制檯輸出內容或者樣式可能需要花費不少的時間去編寫代碼和調試。今天大姚給大家分享一個.NET開源且免費的類庫幫你輕鬆的
大家好,我是R哥。 說說最近的面試輔導,有個學員進了某個知名互聯網公司,拿到了 35K*14 薪的好成績,有不少粉絲留言問我,現在行情這麼差,他是怎麼做到的? 這篇拿他這個案例完整回顧一下吧,我管他叫小Y吧。 背景溝通 說下小Y的基本情況吧
選120hz的比60hz更護眼.
本週刊由 Python貓 出品,精心篩選國內外的 250+ 信息源,爲你挑選最值得分享的文章、教程、開源項目、軟件工具、播客和視頻、熱門話題等內容。願景:幫助所有讀者精進 Python 技術,並增長職業和副業的收入。 本期分享了 12 篇文
參考: https://blog.csdn.net/asdfaa/article/details/137884414 檢查系統是否支持 IPv6,查看被禁用了 在啓用 IPv6 之前,首先要確保您的系統支持 IPv6。要檢查內核
pl/0詞法分析器 下面是這個分析器的功能: 1、 待分析的簡單語言的詞法 (1) 關鍵字: begin if then while do end 所有關鍵字都是小寫。 (2) 運算符和界符: := + – * / < <= <> > >=
今天用VS2019編譯一個在VS2008下Coding的工程的時候,VS給出了一堆鏈接錯誤信息,如下圖所示的一些錯誤: Error 47 error LNK2019: unresolved external symbol "public
Windows平臺NASM彙編與C混合調用 tonyblackwhite 之前介紹了Windows平臺下,用微軟宏彙編MASM與C混合調用的方法。MASM是微軟獨有的,Linux沒法用,我喜歡學一個能夠應用於兩種平臺的,所以還是更鐘情於開源
在線客服系統我利用業餘時間斷斷續續做了好幾年,從一開始的追求完美,到後來的集中精力解決核心問題,從一開始的在每一個用戶身上投入大量時間,到後來學會分辨什麼是有價值客戶,學到很多,成長很多。 有許多工程技術上很好,很優秀的產品,甚至一定程度上
redis配置文件開啓鍵過期 # The "notify-keyspace-events" takes as argument a string that is composed # of zero or multiple charac
國內的IT企業逐漸的都有各種IM機器人,這些IM機器人會不斷的吐數據,但是這些吐數據最後都成了像垃圾消息或者周扒皮一樣的催命通知,完全沒有人性。我非常痛恨這種把IM裏不斷被催的方式,這種方式雖然能起作用,但是人在這種環境下工作真的就成了工具
來自:阿里的 通義靈碼 以下是幾種常見的複製數據類型到剪切板的方法: 複製文本到剪切板 using System.Windows.Forms; // 對於Windows Forms應用 // 或者 using System.Windows
@staticmethod def strSplit(textSource: str, patterns: str)->list: """ 分割字符串 :param