主从表-可编辑明细表格代码

2023-10-17 00:58
文章标签 代码 编辑 主从 明细表

本文主要是介绍主从表-可编辑明细表格代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 项目中因需要用到主从表可编辑表格,原来打算用EXT来实现,但发觉EXT文件实在太大及学习门槛有点高了,所以决定放弃EXT,另在网站转了许久,终于找以下可行代码(感谢作者),此代码可与"我佛山人"的Validator 1.05完美结合:

onlineEditTable.js:

 

// 全局变量
var  inputFocus; // 该变量记录当前焦点的input
var  bKeyDown = false ; // 记录键盘被按下的状态,当有键盘按下时其值为true

function  setRowClass(obj,className){
 obj.className
= className;
 
var  oldClass,toClass;
 
if (className == " tableData " )  {oldClass = " inputTableDataHit " ;toClass = " inputTableData " ;}
 
if (className == " tableDataHit " ) {oldClass = " inputTableData " ;toClass = " inputTableDataHit " ;}
 
var  objsInput = obj.all;
 
for ( var  i = 0 ;i < objsInput.length;i ++ )
  
if (objsInput[i].tagName == " INPUT " ) if (objsInput[i].className == oldClass)objsInput[i].className = toClass;
}

function  lightonRow(obj){
 
if (obj.tagName != " TR " ) return ;

 
// 将所有未被选中的行取消高亮度现实
         var  tableOnlineEdit = obj.parentElement;
        
while (tableOnlineEdit.tagName != " TABLE " )tableOnlineEdit = tableOnlineEdit.parentElement;
 
var  objsCheckBox = tableOnlineEdit.all( " checkLine " );
 
for ( var  iCheckBox = 1 ;iCheckBox < objsCheckBox.length;iCheckBox ++ )
  
if (objsCheckBox[iCheckBox].checked == false ) setRowClass(tableOnlineEdit.rows[iCheckBox + 1 ], " tableData " );

 
// 当前点击行高亮度显示
 setRowClass(obj, " tableDataHit " );
}


// 得到obj的上级元素TagName
function  getUpperObj(obj,TagName){
 
var  strTagName = TagName.toUpperCase();
 
var  objUpper = obj.parentElement;
 
while (objUpper){
  
if (objUpper.tagName == strTagName)  break ;
  objUpper
= objUpper.parentElement;
 }
 
return  objUpper;
}

function  getPosition(obj,pos){
   
var  t = eval( " obj. " + pos);
   
while (obj = obj.offsetParent){
      t
+= eval( " obj. " + pos);
   }
   
return  t;
}
function  showInputSelect(obj,objShow){
 inputFocus
= obj; // 记录当前焦点input至全局变量
 objShow.style.top  = getPosition(obj, " offsetTop " ) + obj.offsetHeight + 2 ;
 objShow.style.left
= getPosition(obj, " offsetLeft " );
 objShow.style.width
= obj.offsetWidth;
 objShow.value
= obj.value;
 objShow.style.display
= " block " ;
}

function  setInputFromSelect(objTo,objShow){
 objTo.value
= objShow.options[objShow.selectedIndex].value;
 
// objShow.style.display="none";
}

function  hideInput(obj){
 obj.style.display
= " none " ;
}

function  clearRow(objTable){
  
var  tbodyOnlineEdit = objTable.getElementsByTagName( " TBODY " )[ 0 ];
  
for  ( var  i = tbodyOnlineEdit.children.length - 1 ;i >= 0 ;i -- )
    tbodyOnlineEdit.deleteRow(i);
}

function  deleteRow(objTable){
 
var  tbodyOnlineEdit = objTable.getElementsByTagName( " TBODY " )[ 0 ];
 
for  ( var  i = tbodyOnlineEdit.children.length - 1 ; i >= 0  ; i --  )
  
if  (tbodyOnlineEdit.children[i].firstChild.firstChild.checked)
   tbodyOnlineEdit.deleteRow(i);
}

function  addRow(objTable){
 
var  tbodyOnlineEdit = objTable.getElementsByTagName( " TBODY " )[ 0 ];
 
var  theadOnlineEdit = objTable.getElementsByTagName( " THEAD " )[ 0 ];
 
var  elm  =  theadOnlineEdit.lastChild.cloneNode( true );
 elm.style.display
= "" ;
 tbodyOnlineEdit.insertBefore(elm);
}

// 将指定数据行的objRow的输入域strName设置为strValue
function  setInputValue(objRow,strName,strValue){
 
var  objs = objRow.all;
 
for ( var  i = 0 ;i < objs.length;i ++ ){
  
if (objs[i].name == strName)objs[i].value = strValue;
 }
}

// 添加一个实例数据行
function  addInstanceRow(objTable,Names,Values){
 
var  tbodyOnlineEdit = objTable.getElementsByTagName( " TBODY " )[ 0 ];
 
var  theadOnlineEdit = objTable.getElementsByTagName( " THEAD " )[ 0 ];
 
var  elm  =  theadOnlineEdit.lastChild.cloneNode( true )
 elm.style.display
= "" ;
        
for ( var  i = 0 ;i < Names.length;i ++ )
          setInputValue(elm,Names[i],Values[i]);
 tbodyOnlineEdit.insertBefore(elm);
}

// 将全部复选框设为指定值
function  setOnlineEditCheckBox(obj,value){
 
var  tbodyOnlineEdit = obj.getElementsByTagName( " TBODY " )[ 0 ];
 
for  ( var  i = tbodyOnlineEdit.children.length - 1 ; i >= 0  ; i --  )
  tbodyOnlineEdit.children[i].firstChild.firstChild.checked
= value;
}

// 为动态表格增加键盘导航功能,要使用该功能请在表格定义中增加事件处理onKeyDown="navigateKeys()" onKeyUp="setKeyDown(false)"
//
有一点点问题,当按下"->"跳转到下一输入域时,光标显示在第一个字符之后
//
建议仍然使用Tab键跳转
function  navigateKeys(){
 
if (bKeyDown)  return ;
 bKeyDown
= true ;
 
var  elm = event.srcElement;
 
if (elm.tagName != " INPUT " return ; // 默认只对INPUT进行导航,可自行设定

 
var  objTD = elm.parentElement;
 
var  objTR = objTD.parentElement;
 
var  objTBODY = objTR.parentElement.parentElement;
 
var  objTable = objTBODY.parentElement;

 
var  nRow = objTR.rowIndex;
 
var  nCell = objTD.cellIndex;

 
var  nKeyCode = event.keyCode;
 
switch (nKeyCode){
  
case   37 : // <-
    if (getCursorPosition(elm) > 0 ) return ;
   nCell
-- ;
   
if (nCell == 0 ){
    nRow
-- ; // 跳转到上一行
    nCell = objTR.cells.length - 1 ; // 最后一列
   }
   
break ;
  
case   38 : // ^
   nRow -- ;
   
break ;
  
case   39 : // ->
    if (getCursorPosition(elm) < elm.value.length) return ;
   nCell
++ ;
   
if (nCell == objTR.cells.length){    
    nRow
++ ; // 跳转到下一行首位置
    nCell = 1 ; // 第一列
   }
   
break ;
  
case   40 : // |/
   nRow ++ ;
   
if (nRow == objTBODY.rows.length){    
    addRow(objTable);
// 增加一个空行
    nCell = 1 ; // 跳转到第一列
   }
   
break ;
  
case   13 : // Enter
   nCell ++ ;
   
if (nCell == objTR.cells.length){    
    nRow
++ ; // 跳转到下一行首位置
    nCell = 1 ; // 第一列
   }
   
if (nRow == objTBODY.rows.length){    
    addRow(objTable);
// 增加一个空行
    nCell = 1 ; // 跳转到第一列
   }

   
break ;
  
default : // do nothing
    return ;
 }
 
if (nRow < 2   ||  nRow >= objTBODY.rows.length  ||  nCell < 1   || nCell >= objTR.cells.length)  return ;

 objTR
= objTBODY.rows[nRow];
 objTD
= objTR.cells[nCell];
 
var  objs = objTD.all;
 
for ( var  i = 0 ;i < objs.length;i ++ ){
  
// 此处使用ojbs[0],实际使用时可能需要加以修改,或加入其他条件
   try {
   lightonRow(objTR);
   objs[i].focus();
// setCursorPosition(objs[i],-1);
    return ;
  }
catch (e){
   
continue ;
   
// if error occur,continue to next element
  }
 }
// end for objs.length
}


// 设置键盘状态,即bKeyDown的值
function  setKeyDown(status){
 bKeyDown
= status;
}


// 得到光标的位置
function  getCursorPosition(obj){
 
var  qswh = " @#%#^&#*$ "
 obj.focus();
 rng
= document.selection.createRange();
 rng.text
= qswh;
 
var  nPosition = obj.value.indexOf(qswh)
 rng.moveStart(
" character " - qswh.length)
 rng.text
= "" ;
 
return  nPosition;
}


// 设置光标位置
function  setCursorPosition(obj,position){
 range
= obj.createTextRange(); 
 range.collapse(
true ); 
 range.moveStart(
' character ' ,position); 
 range.select();
}

 

onlineEditTable.css:

 

.thData {
BACKGROUND
: 0a6846 ;
}
.tableData 
{
BACKGROUND
:  white ;  BORDER-BOTTOM :  white 1px dashed ;  BORDER-LEFT :  white 1px dashed ;  BORDER-RIGHT :  white 1px dashed ;  BORDER-TOP :  white 1px dashed ;  COLOR :  black ;  CURSOR :  hand ;  FONT-FAMILY :  verdana,arial,helvetica ;  FONT-SIZE :  12px
}
.inputTableData 
{
BACKGROUND
:  white ;  BORDER-BOTTOM :  white 1px dashed ;  BORDER-LEFT :  white 1px dashed ;  BORDER-RIGHT :  white 1px dashed ;  BORDER-TOP :  white 1px dashed ;  COLOR :  black ;  CURSOR :  hand ;  FONT-FAMILY :  verdana,arial,helvetica ;  FONT-SIZE :  12px ; width : 100% ;
}
.tableDataSel 
{
BACKGROUND
:  #6090d0 ;  BORDER-BOTTOM :  #6090d0 1px dashed ;  BORDER-LEFT :  #6090d0 1px dashed ;  BORDER-RIGHT :  #6090d0 1px dashed ;  BORDER-TOP :  #6090d0 1px dashed ;  COLOR :  white ;  CURSOR :  hand ;  FONT-FAMILY :  verdana,arial,helvetica ;  FONT-SIZE :  12px
}
.tableDataHit 
{
BACKGROUND
:  #d0e0ff ;  BORDER-BOTTOM :  #d0e0ff 1px dashed ;  BORDER-LEFT :  #d0e0ff 1px dashed ;  BORDER-RIGHT :  #d0e0ff 1px dashed ;  BORDER-TOP :  #d0e0ff 1px dashed ;  COLOR :  black ;  CURSOR :  hand ;  FONT-FAMILY :  verdana,arial,helvetica ;  FONT-SIZE :  12px
}
.inputTableDataHit 
{
BACKGROUND
:  #d0e0ff ;  BORDER-BOTTOM :  #d0e0ff 1px dashed ;  BORDER-LEFT :  #d0e0ff 1px dashed ;  BORDER-RIGHT :  #d0e0ff 1px dashed ;  BORDER-TOP :  #d0e0ff 1px dashed ;  COLOR :  black ;  CURSOR :  hand ;  FONT-FAMILY :  verdana,arial,helvetica ;  FONT-SIZE :  12px ; width : 100%
}
.tableDataOver 
{
BACKGROUND
:  #d0e0ff ;  BORDER-BOTTOM :  #d0e0ff 1px dashed ;  BORDER-LEFT :  #d0e0ff 1px dashed ;  BORDER-RIGHT :  #d0e0ff 1px dashed ;  BORDER-TOP :  #d0e0ff 1px dashed ;  COLOR :  black ;  CURSOR :  hand ;  FONT-FAMILY :  verdana,arial,helvetica ;  FONT-SIZE :  12px
}
.scheduleButtonVisible 
{
BACKGROUND
:  silver ;  BORDER-BOTTOM :  gray 1px dashed ;  BORDER-LEFT :  white 1px dashed ;  BORDER-RIGHT :  gray 1px dashed ;  BORDER-TOP :  white 1px dashed ;  COLOR :  black ;  CURSOR :  hand ;  FONT-FAMILY :  webdings ;  FONT-SIZE :  12px
}

 

OnlineEditTable.html:

 

< html >
< head >
<!--
 * Title:  Table to edit online
 * Description: Use to table to input data to a form 
 * Copyright:  Copyright (c) 2003
 * Company:  weide
 * @author  weidegong(weidegong@yahoo.com.cn)
 * @version  3.2
 * Function  动态可编辑表格构成的表单,其中输入域及其输入形式可根据实际需要自行设置(参考本例Select),IE6测试通过
   将script和style定义放在页面head区;将如<table></table>区域拷贝至需要使用该表格的位置即可;最下方为参考按钮
   为了能在同一Form中使用多个表格,故将<table>放在form中,而不是将<TBODY>放在form中,这样导致提交的输入域的第一个值无效,如在JSP中:String strxs[]=request.getParameterValues("x");//则strxs[0]即为无效数据

   thead.tr.th:定义表头,可以设置相应的列宽;th的数目需要同下面的td数目相同,以一一对应;其中"X"是固定列
   thead.tr.td.<input ... name=x>设置相应数据列对应的输入域的名字;其中第一列用于显示一个选择框
   tableData,默认<TR>的样式单名称;tableDataHit,高亮度显示时<TR>采用的样式单
   inputTableData,显示数据时表格中input输入域使用的样式单;inputTableDataHit,TR高亮度显示时,input使用的样式单
 * @History  1.0 从网上下载了例子,并略作修改
   2.0 使用CSS表单美化界面;增加一个模拟可编辑Select下拉框
   3.0 将addRow,deleteRow修改为带有对象类型参数的函数,使得在同一界面可使用可编辑表格的多个实例
   3.1 将addRow,deleteRow函数的参数修改为表格对象,更加方便;整理出onlineEditTable.css、onlineEditTable.js
   3.2 (2003-03-27)增加键盘导航功能,使用方向键或回车键均可
-->

< meta  http-equiv ="Content-Type"  content ="text/html; charset=utf8" >
< LINK  href ="onlineEditTable.css"  type =text/css  rel =stylesheet >
< script  language ="javascript"  src ="onlineEditTable.js" ></ script >
</ head >
< body >

< select  id =qswh  size =6   style ="position:absolute;display:none"  onblur ="this.style.display='none'"  onchange ="setInputFromSelect(inputFocus,this)" >
< option  value ="1" > 中国 </ option >
< option  value ="2" > 美国 </ option >
< option  value ="3" > 英国 </ option >
</ select >

< form  name =frmTableOnlineEdit  action ="showPara.htm" >
< TABLE  bgColor =silver  border =2  borderColorDark =gray  borderColorLight =silver
cellPadding =2  cellSpacing =1  cols =1  id =tableOnlineEdit  rules =rows  width ="100%"  onKeyDown ="navigateKeys()"  onKeyUp ="setKeyDown(false)" >
< thead >

< tr  bgColor =#0a6846 >
 
< th  class =thData  width =1% >< input  type =checkbox  id =checkLineAll  onclick =setOnlineEditCheckBox(getUpperObj(this,"TABLE"),this.checked) ></ th > <!-- Fixed -->
 
< th  class =thData  width =30% > 标题一 </ th >
 
< th  class =thData  width =30% > 标题二 </ th >
 
< th  class =thData  width =39% > 标题三 </ th >
 
<!-- <th....................标题N...可定义多个 -->
</ tr >

< TR  style ="display:none"  bgColor =#e0e0e0  class =tableData  onclick =lightonRow(this) >
 
< TD  class =scheduleButtonVisible  >< input  type =checkbox  id =checkLine ></ td > <!-- Fixed -->
 
< TD >< input  class =inputTableData  name =x  onclick =showInputSelect(this,qswh)  onblur =hideInput(qswh) ></ TD >
 
< TD >< input  class =inputTableData  name =y ></ TD >
 
< TD >< input  class =inputTableData  name =z ></ TD >
 
<!-- <TD><input...........name=...></TD>....可定义多个,与上面的<th>数目保持一致... -->
</ TR >

</ thead >

< tbody >
< TR  style ="display:''"  bgColor =#e0e0e0  class =tableData  onclick =lightonRow(this) >
 
< TD  class =scheduleButtonVisible  >< input  type =checkbox  id =checkLine  value ="12" ></ td > <!-- Fixed -->
 
< TD >< input  class =inputTableData  name =x  onclick =showInputSelect(this,qswh)  onblur =hideInput(qswh)  value ="34" ></ TD >
 
< TD >< input  class =inputTableData  name =y  value ="56" ></ TD >
 
< TD >< input  class =inputTableData  name =z  value ="789" ></ TD >
 
<!-- <TD><input...........name=...></TD>....可定义多个,与上面的<th>数目保持一致... -->
</ TR >
< TR  style ="display:''"  bgColor =#e0e0e0  class =tableData  onclick =lightonRow(this) >
 
< TD  class =scheduleButtonVisible  >< input  type =checkbox  id =checkLine  value ="as" ></ td > <!-- Fixed -->
 
< TD >< input  class =inputTableData  name =x  onclick =showInputSelect(this,qswh)  onblur =hideInput(qswh)  value ="df" ></ TD >
 
< TD >< input  class =inputTableData  name =y  value ="er" ></ TD >
 
< TD >< input  class =inputTableData  name =z  value ="htg" ></ TD >
 
<!-- <TD><input...........name=...></TD>....可定义多个,与上面的<th>数目保持一致... -->
</ TR >
< TR  style ="display:''"  bgColor =#e0e0e0  class =tableData  onclick =lightonRow(this) >
 
< TD  class =scheduleButtonVisible  >< input  type =checkbox  id =checkLine  value ="!@" ></ td > <!-- Fixed -->
 
< TD >< input  class =inputTableData  name =x  onclick =showInputSelect(this,qswh)  onblur =hideInput(qswh)  value ="^$" ></ TD >
 
< TD >< input  class =inputTableData  name =y  value ="@#" ></ TD >
 
< TD >< input  class =inputTableData  name =z  value ="$#" ></ TD >
 
<!-- <TD><input...........name=...></TD>....可定义多个,与上面的<th>数目保持一致... -->
</ TR >
</ tbody >

</ TABLE >

</ form >
< align =center >< font  size ="1" > 注:第一列单击弹出下拉框选择;在表格最后一行,按下“下箭头”可以增加一个新的空行;使用回车键可以向下遍历整个表格 </ p >
< align =center >< font  size ="2" > *****=====下列按钮根据需要选定使用======***** </ font ></ p >

< align =center >
< input  type =button  onclick ="addRow(tableOnlineEdit)"  value ="添加空数据行" >
< input  type =button  onclick ="addInstanceRow(tableOnlineEdit,['x','y','z'],['1','100','这是一个测试的例子'])"  value ="添加实例数据行" >
< input  type =button  onclick ="deleteRow(tableOnlineEdit)"  value ="删除" >
< input  type =button  onclick ="clearRow(tableOnlineEdit)"  value ="删除全部" >
< input  type =button  onclick ="frmTableOnlineEdit.submit()"  value ="submit Form" >
< input  type =button  onclick ="frmTableOnlineEdit.reset()"  value ="Reset" >
</ p >

 

 

 

============================另一个实例=================================
< form  action ="showPara.htm" >
< TABLE  bgColor =silver  border =2  borderColorDark =gray  borderColorLight =silver
cellPadding =2  cellSpacing =1  cols =1  id =tableResource  rules =rows  width ="100%"  onKeyDown ="navigateKeys()"  onKeyUp ="setKeyDown(false)" >
< thead >

< tr  bgColor =#0a6846 >
 
< th  class =thData  width =1% >< input  type =checkbox  id =checkLineAll  onclick =setOnlineEditCheckBox(getUpperObj(this,"TABLE"),this.checked) ></ th > <!-- Fixed -->
 
< th  class =thData  width =30% > 标题一 </ th >
 
< th  class =thData  width =30% > 标题二 </ th >
 
< th  class =thData  width =39% > 标题三 </ th >
 
<!-- <th....................标题N...可定义多个 -->
</ tr >

< TR  style ="display:none"  bgColor =#e0e0e0  class =tableData  onclick =lightonRow(this) >
 
< TD  class =scheduleButtonVisible  >< input  type =checkbox  id =checkLine ></ td > <!-- Fixed -->
 
< TD >< input  class =inputTableData  name =x  onclick =showInputSelect(this,qswh)  onblur =hideInput(qswh) ></ TD >
 
< TD >< input  class =inputTableData  name =y ></ TD >
 
< TD >< input  class =inputTableData  name =z ></ TD >
 
<!-- <TD><input...........name=...></TD>....可定义多个,与上面的<th>数目保持一致... -->
</ TR >

</ thead >

< tbody >
</ tbody >

</ TABLE >

</ form >
< align =center >< font  size ="2" > *****=====下列按钮根据需要选定使用======***** </ font ></ p >

< align =center >
< input  type =button  onclick ="addRow(tableResource)"  value ="添加空数据行" >
< input  type =button  onclick ="addInstanceRow(tableResource,['x','y','z'],['1','100','这是一个测试的例子'])"  value ="添加实例数据行" >
< input  type =button  onclick ="deleteRow(tableResource)"  value ="删除" >
< input  type =button  onclick ="clearRow(tableResource)"  value ="删除全部" >
< input  type =button  onclick ="setOnlineEditCheckBox(tableResource,true)"  value ="选中全部" >
</ p >

</ body >
</ html >

 

 

这篇关于主从表-可编辑明细表格代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/221867

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计