说明: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>
問題場景: 一個朋友說他用kettle將生成好的多個文件(a.xls和b.xls,文件在data目錄下)發送給客戶,但是data目錄下還有其他的文件,他如果指定data目錄發送會把 data目錄下面的所有文件都作爲附件進行發送,顯然不符合要
cartpole遊戲,車上頂着一個自由擺動的杆子,實現杆子的平衡,杆子每次倒向一端車就開始移動讓杆子保持動態直立的狀態,策略函數使用一個兩層的簡單神經網絡,輸入狀態有4個,車位置,車速度,杆角度,杆速度,輸出action爲左移動或右移動
Transformers 是一個強大的架構,但模型因其採用的自注意力機制,雖然能夠有效地處理序列數據並捕獲長距離依賴關係,但同時也容易導致在訓練過程中出現OOM(Out of Memory,內存不足)或者達到GPU的運行時限制。 主要是因爲
當一個線程被啓動後,如果再次調start()方法,將會拋出IllegalThreadStateException異常。 這是因爲Java線程的生命週期只有一次。調用start()方法會導致系統在新線程中運行執行體,但是如果線程已經結束,則
痞子衡嵌入式半月刊: 第 100 期 這裏分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡
一、題目 給定 n 個物品,第 i 個物品的重量爲 wgt[i-1]、價值爲 val[i-1] ,和一個容量爲 cap 的揹包。每個物品可以重複選取,問在限定揹包容量下能放入物品的最大價值。 二、和ChatGPT聊聊 您 您是一位資深
QuickLib 是一個快速開發庫 QuickLib是一個快速開發庫,它提供了諸如AutoMapper、LinQ、IOC依賴注入、MemoryCache、計劃任務、Json和Yml配置、序列化程序等多種功能。這個庫特別支持Delphi和Fi
問題現象 近期本人負責的一個SpringBoot模塊出現了java.lang.NoSuchMethodError報錯,問題情況如下: A類提供了setJumpType(String type),B類調用A類的setJumpType(Str
在SQL Server中,要查詢近3分鐘最消耗CPU的SQL語句,可以使用sys.dm_exec_query_stats動態管理視圖結合sys.dm_exec_sql_text函數來獲取SQL語句的文本。不過,直接查詢近3分鐘的數據可能需要
使用動態管理視圖(DMVs)來檢測SQL執行計劃的突變,你需要關注那些能夠提供查詢執行統計和計劃信息的視圖。以下是一些可以用於此目的的DMVs以及相應的查詢示例: sys.dm_exec_query_stats:這個視圖提供了關於SQL
sudo ctr image import image.tar #導入docker鏡像 sudo ctr image list #顯示鏡像列表 sudo ctr containers list #列出容器列表
一、概述 關於 Shopify Theme 的性能優化,通常有以下幾點: 1、卸載未使用的應用程序 有些 app 會在 theme 裏面插入一些代碼,即使 app 未被使用,也可能會加載一些腳本文件,影響頁面渲染速度,所以建議不使用的 ap
from selenium.webdriver import Chrome import time # https://blog.csdn.net/zhoukeguai/article/details/113247342 # driver
apifox, 完全免費軟件, 比postman好用, 性能高, 推薦給每一個童鞋.
本週刊由 Python貓 出品,精心篩選國內外的 250+ 信息源,爲你挑選最值得分享的文章、教程、開源項目、軟件工具、播客和視頻、熱門話題等內容。願景:幫助所有讀者精進 Python 技術,並增長職業和副業的收入。 本期分享了 12 篇文