`
java-mans
  • 浏览: 11465442 次
文章分类
社区版块
存档分类
最新评论

javascript表格操作大全:表格排序/倒序、动态添加列、批量删除、删除一行、隔行变色、鼠标悬浮切换背景色、全选/反选。(IE、火狐都兼容)

 
阅读更多


表格.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>表格操作</title>
	<script type= "text/javascript" src="domutil.js" ></script>
</head>

<body>  
	
				<!--以下数据纯属虚构,为排序而随意填写的-->

	<table id="tab" border="1" style =" align:center;text-align:center ">
		<thead style="background:#0000FF" onmouseover="over(this)" onmouseout="out(this)">
			<tr>
				<th><input type="checkbox" name="quan" onclick="quan()" style="cursor:pointer"/>全选</th>
				<th onclick="sortTable('tab',1,'int')" style="cursor:pointer">编号</th>
				<th onclick="sortTable('tab',2,'汉字')" style="cursor:pointer">编程语言</th>
				<th onclick="sortTable('tab',3,'汉字')" style="cursor:pointer">所属公司</th>
				<th onclick="sortTable('tab',4,'float')" style="cursor:pointer">市场份额</th>
				<th onclick="sortTable('tab',5,'date')" style="cursor:pointer">诞生日期</th>
				<th style="cursor:pointer">操作</th>
			</tr>
		</thead>
		<tbody id="tbody">
			<tr style="background:#00FF00" onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="checkbox" /></td>
				<td width=100 id="ID">4</td>
				<td id="name" width="100">Java</td>
				<td id="company" width="100" >甲骨文公司</td>
				<td id="age" width="100">47.6</td>
				<td id="date" width="100">1970/09/09</td>
				<td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>
			</tr>
			<tr style="background:#00FFFF" onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="checkbox" /></td>
				<td width=100 id="ID">6</td>
				<td id="name" width="100">C</td>
				<td id="company" width="100">微软公司</td>
				<td id="age" width="100">30.3</td>
				<td id="date" width="100">1980/09/09</td>
				<td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>
			</tr>
			<tr style="background:#00FF00" onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="checkbox" /></td>
				<td width=100 id="ID">3</td>
				<td id="name" width="100">PHP</td>
				<td id="company" width="100">公司Zend</td>
				<td id="age" width="100">22.1</td>
				<td id="date" width="100">1990/09/09</td>
				<td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>
			</tr>
			<tr style="background:#00FFFF" onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="checkbox" /></td>
				<td width=100 id="ID">1</td>
				<td id="name" width="100">Objective-C</td>
				<td id="company" width="100" >奥特曼</td>
				<td id="age" width="100">35.9</td>
				<td id="date" width="100">1975/09/09</td>
				<td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>
			</tr>
			<tr style="background:#00FF00" onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="checkbox" /></td>
				<td width=100 id="ID">5</td>
				<td id="name" width="100">VB</td>
				<td id="company" width="100">汗啊</td>
				<td id="age" width="100">32.7</td>
				<td id="date" width="100">1985/09/09</td>
				<td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>
			</tr>
			<tr style="background:#00FFFF" onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="checkbox" /></td>
				<td width=100 id="ID">2</td>
				<td id="name" width="100">javascript</td>
				<td id="company" width="100">繁体</td>
				<td id="age" width="100">99.8</td>
				<td id="date" width="100">2010/09/09</td>
				<td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>
			</tr>
		</tbody>
		<tfoot style="background:#C0C0C0">
			<tr onmouseover="over(this)" onmouseout="out(this)">
				<td><input type="checkbox" name="fan" onclick="fan()"/>反选</td>
				<td colspan="6">
				<input type="button" value="添加数据" onclick="addRow()" />  
				<input type="button" value="删除选中行" onclick="deleteChecked()"/>
				</td>
			</tr>
		</tfoot>
	</table>
	
</body> 
<script type="text/javascript"> 
		/*
		全局变量
		ID:    保存插入数据的编号
		color:保存原来的背景色
		*/
		var ID,color;
		window.onload = function(){
			var myTab = $q("#tab");
			ID = myTab.rows.length-1;
		}
		//鼠标悬浮在某元素时
		function over(node){
			color = node.style.backgroundColor;
			node.style.backgroundColor = '#FF00FF';
		}
		//鼠标离开某元素时
		function out(node){
			node.style.backgroundColor = color;
		}
		//全选
		function quan(){
			var checkArr = $q("$checkbox"); //得到tbody行的集合
			var qArr = $q("$quan"); 
			if(qArr[0].checked){ //如果是全选,设置全部选中
				for(var i=0;i<checkArr.length;i++){	 
					checkArr[i].checked = true;
				}
			}else{  //如果没有全选,设置全部没选中
				for(var i=0;i<checkArr.length;i++){	
					checkArr[i].checked = false;
				}
			}
		}

		//反选
		function fan(){
			var checkArr = $q("$checkbox"); //得到tbody行的集合
			for(var i=0;i<checkArr.length;i++){	//循环将所有行反选
				checkArr[i].checked = checkArr[i].checked ? false : true;
			}
		}

		//添加一行数据
		function addRow(){
			var myTab = $q("#tab");
			var rowLength = myTab.rows.length;
			var newRow = document.createElement("tr"); //创建一行
			//设置隔行变色
			if(rowLength%2 == 1){
				newRow.style.background = "#00FFFF";
			}else{
				newRow.style.background = "#00FF00";
			}
			if(newRow.addEventListener){
				//给创建的行添加鼠标悬浮的事件
				newRow.addEventListener("mouseover",function(){over(newRow);},false);
				//给创建的行添加鼠标离开的事件
				newRow.addEventListener("mouseout",function(){out(newRow);},false);
			}else if(newRow.attachEvent){
				//给创建的行添加鼠标悬浮的事件
				newRow.attachEvent("onmouseover",function(){over(newRow);});
				//给创建的行添加鼠标离开的事件
				newRow.attachEvent("onmouseout",function(){out(newRow);});
			}else{
				//给创建的行添加鼠标悬浮的事件
				newRow.onmouseover = function(){over(newRow);};
				//给创建的行添加鼠标离开的事件
				newRow.onmouseout = function(){out(newRow);};
			}  
			//创建多列
			var newCell1 = document.createElement("td");
			newCell1.innerHTML = '<input type="checkbox" name="checkbox" />';
			var newCell2 = document.createElement("td");
			newCell2.innerHTML = ID;
			ID += 1;
			var newCell3 = document.createElement("td");
			newCell3.innerHTML = prompt("请输入编程语言:","");
			var newCell4 = document.createElement("td");
			newCell4.innerHTML = prompt("请输入所属公司:","");
			var newCell5 = document.createElement("td");
			newCell5.innerHTML = prompt("请输入市场份额:","");
			var newCell6 = document.createElement("td");
			newCell6.innerHTML = prompt("请输入诞生日期:","");
			var newCell7 = document.createElement("td");
			newCell7.innerHTML = '<input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)" />' ;
			//将创建的多列添加到行
			newRow.appendChild(newCell1);
			newRow.appendChild(newCell2);
			newRow.appendChild(newCell3);
			newRow.appendChild(newCell4);
			newRow.appendChild(newCell5);
			newRow.appendChild(newCell6);
			newRow.appendChild(newCell7);
			var tbody = myTab.tBodies[0]; //获取表格的tbody
			tbody.appendChild(newRow);  //将创建的行添加到表格body里
		} 
		//删除一行数据
		function deleteRow(currentRow){
			var tab = $q("#tab"); //获得表格节点
			tab.deleteRow(currentRow.rowIndex); //删除选中的行
		}
		//删除多行数据
		function deleteChecked(){
			var tab = $q("#tab"); //获得表格节点
			var checkArr = $q("$checkbox");  //得到tbody行的集合
			for(var i=0;i<checkArr.length;i++){
				if(checkArr[i].checked){  //用循环删除选中的行
					var index = checkArr[i].parentNode.parentNode.rowIndex;
					tab.deleteRow(index);
				}
			}
		}
		//转换数据类型,v为值,dataType为数据类型
		function convert(v,dataType){
			switch(dataType){
				case "int":
					return parseInt(v);
				case "float":
					return parseFloat(v);
				case "date":
					return (new Date(Date.parse(v)));
				default:
					return v.toString();
			}
		}
		//排序函数,index为索引,type为数据类型
		function pai(index,dataType){
			if(dataType === "汉字"){
				return function compare(a,b){
							var str1 = convert(a.cells[index].innerHTML,dataType); 
							var str2 = convert(b.cells[index].innerHTML,dataType);
							return str1.localeCompare(str2);
						};
			}else{
				return function compare(a,b){
							//var str1 = convert(a.cells[index].firstChild.nodeValue,dataType);
							//var str2 = convert(b.cells[index].firstChild.nodeValue,dataType);
							var str1 = convert(a.cells[index].innerHTML,dataType); //两种方法效果一样
							var str2 = convert(b.cells[index].innerHTML,dataType);
							if(str1 < str2){
								return -1;
							}else if(str1 > str2){
								return 1;
							}else{ 
								return 0;
							}
						};
			}
		}
		//排序的过程
		function sortTable(tableID,index,dataType){
			var tab = $q("#"+tableID); //获取表格的ID
			var td = tab.tBodies[0]; //获取表格的tbody
			var newRows = td.rows;   //获取tbody里的所有行
			var arr = new Array();   //定义arr数组用于存放tbody里的行
			//用循环将所有行放入数组
			for(var i=0;i<newRows.length;i++){
				arr.push(newRows[i]);
			}
			//判断最后一次排序的列是否与现在要进行排序的列相同,如果是就反序排列
			if(tab.sortCol == index){
				arr.reverse();
			}else{ 
				//使用数组的sort方法,传进排序函数
				arr.sort(pai(index,dataType));
			}
			var oFragment = document.createDocumentFragment(); //创建文档碎片
            for (var i=0; i < arr.length; i++) {  //把排序过的aTRs数组成员依次添加到文档碎片
				if(i%2 == 1){
					arr[i].style.background = "#00FFFF";
					oFragment.appendChild(arr[i]);
				}else{
					arr[i].style.background = "#00FF00";
					oFragment.appendChild(arr[i]);
				}
			}
            td.appendChild(oFragment); //把文档碎片添加到tbody,完成排序后的显示更新
            tab.sortCol = index;  //记录最后一次排序的列索引
		}
	</script>
</html>

domutil.js

(此js为课堂笔记整理而成,有部分代码本次没有用到的)

var CustomFunctions = {
	//获取子节点的集合(ie,ff通用)
	getChildNodes:function(node){
		var arr = [];
		var nodes = node.childNodes;
		for(var i in nodes){
			if(nodes[i].nodeType == 1){ //查找元素节点
				arr.push(nodes[i]);
			}
		}
		return arr;
	},
	//获取第一个元素子节点(ie,ff通用)
	getFirstElementChild : function(node){
		return node.firstElementChild ? node.firstElementChild : node.firstChild ;
	},
	//获取最后一个元素子节点(ie,ff通用)
	getLastElementChild : function(node){
		return node.lastElementChild ? node.lastElementChild : node.lastChild ;
	},
	//获取上一个相邻节点(ie,ff通用)
	getPreviousSibling : function(node){
		//找到上一个节点就返回节点,没找到就返回null
		do{
			node = node.previousSibling;
		}while(node && node.nodeType!=1)
		return node;
	},
	//获取下一个相邻节点 (ie,ff通用)
	getNextSibling : function(node){
		//找到下一个节点就返回节点,没找到就返回null
		do{
			node = node.nextSibling;
		}while(node && node.nodeType!=1)
		return node;
	},
	//将元素插入到指定的node节点后面
	insertAfter : function(newNode,targetNode){
		if(newNode && targetNode){
			var parent = targetNode.parentNode;
			var nextNode = this.getNextSibling(targetNode);
			if(nextNode && parent){
				parent.insertBefore(newNode,nextNode);
			}else{
				parent.appendChild(newNode);
			}
		}
	}
};

/*清除字符串前后的空格*/
String.prototype.trim=function(){
	return this.replace(/^\s*|\s*$/,"");
};

/*
查找元素:
$q("div"):bytagname
$q(".l"):byclassname
$q("#l"):byid
$q("$name"):byname
selector:选择符
parentElement:父元素
*/
window.$q = function(selector,parentElement){
	if(selector && (typeof selector) === 'string'){
		selector = selector.trim();//去掉前后空格
		var parentEl = parentElement || document;
		var nodeArr = new Array();	
		var firstChar = selector.substr(0,1);	//取得第一个字符
		//以#开头,表示根据ID查找
		if(firstChar === '#'){
			return parentEl.getElementById(selector.substr(1));
		}
		//以$开头,根据name查找
		else if(firstChar === '$'){
			var all = parentEl.getElementsByTagName("*");
			for(var i=0;i<all.length;i++){
				var name = all[i].getAttribute("name");
				if(name === selector.substr(1)){
					nodeArr.push(all[i]);
				}
			}
			delete i;
			return nodeArr;
		}
		//以.开头,根据class名查找
		else if(firstChar === '.'){
			var className = selector.substr(1);
			if(parentEl.getElementsByClassName){
				return parentEl.getElementsByClassName(className);
			}
			else{
				var childList = parentEl.getElementsByTagName("*");
				for(var i=0;i<childList.length;i++){
					var nodeClassName = childList[i].className;
					var classNameArr = nodeClassName.split(' ');
					for(var j=0;j<classNameArr.length;j++){
						if(classNameArr[j]===className){
							nodeArr.push(childList[i]);
						}
					}
					delete j;
				}
				delete i;
				return nodeArr;
			}
		}
		//否则,根据标签名查找
		else{
			return parentEl.getElementsByTagName(selector);
		}
		
	}
	else{
		return document.all || document.getElementsByTagName("*");
	}

};


分享到:
评论

相关推荐

    HP-Socket编译-Linux

    HP-Socket编译-Linux

    JavaScript_生活在Discord上的开源社区列表.zip

    JavaScript

    JavaScript_MultiOn API.zip

    JavaScript

    JavaScript_简单和完整的React DOM测试工具,鼓励良好的测试实践.zip

    JavaScript

    JavaScript_成为一个Nodejs开发者.zip

    JavaScript

    node-v14.5.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    android手机应用源码带文字的ProgressBar Demo源码.rar

    android手机应用源码带文字的ProgressBar Demo源码.rar

    JavaScript_基于Electron和Vuejs的全新跨平台Apple Music体验,从头开始编写,并考虑到性能.zip

    JavaScript

    海信LED32EC290N(0000)BOM1通用LED32K220(0000)BOM1生产用软件数据U盘升级文件.zip

    机型:LED32K220 BOM:1 编号:LED32K220(0000)_C010 方案:MST628 版本号:LED32K220_V0000.30.20A.G0809 U盘升级说明: 就是将下载的程序解压到U盘根目录下,即根目录下有个TargetHis文件夹。 U盘采用FAT32格式,将U盘插在上面那个USB口上(若不行则更换另一个usb口)。 升级方式1: 电视开机后,插入U盘,会弹出提示是否升级,确定即可。 升级方式2: 交流开机瞬间不停的按下、松开home键,然后进入自动升级界面。 新贴片的程序第一次升级可能会在升级进度21%的界面卡住,交流断电再上电即可,继续升级。升级完成后自动启动完成即可(首次开机可能要3分钟)。 升级方式3: 插入U盘,电视上电时在串口打印界面按回车键使开机停止在boot界面,键入cu命令,然后回车即可。

    Python笔记.zip

    Python笔记.zip

    人工智能和智能制造的交汇点

    参考行业研究

    Java输出后序遍历二叉树的代码

    附件是Java输出后序遍历二叉树的代码,后序遍历的顺序是:首先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。 TreeNode 类定义了二叉树的节点,BinaryTree 类包含一个 root 属性和 postOrderTraversal 方法。postOrderTraversal 方法递归地遍历二叉树,首先遍历左子树,然后遍历右子树,最后访问当前节点。

    西门子840 x130口设置

    可以通过这个资料 完成西门子840Dsl的x130口采集

    蛋白质耐热温度分类及预测重要数据表.zip

    蛋白质耐热温度分类及预测重要数据表蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

    一个简单的HTML5和CSS代码示例,用于创建一个动态的爱心形状,并在网页上展示一个类似520表白的消息 这个示例使用了CSS的

    520表白html5爱心代码 一个简单的HTML5和CSS代码示例,用于创建一个动态的爱心形状,并在网页上展示一个类似520表白的消息。这个示例使用了CSS的动画效果和HTML的结构。

    node-v16.19.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v15.3.0-headers.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    海信电视刷机数据 LED32K370(0000)BOM1升级VIDAA2软件数据 务必确认机编一致 强制刷机 整机USB升级程序

    MT5505机芯升级方法: 1、下载数据,压缩包解压,升级软件文件夹名字为Hisense_5505,文件夹下包含“机型名.pkg”以及version.txt 2、将文件夹Hisense_5505,整个文件夹拷贝至U盘根目录下 3、电视关机,插入U盘(USB3或者靠近高频头的USB口),重新启动电视机,电视机自动检测到升级软件之后并进行升级 4、在升级过程中屏幕有相关提示,升级完成后能自动开机。(建议是升级完成之后拔下U盘设备以免下次开机进行重复性升级) 注意: 1、(U盘要求使用FAT32格式,建议4G-8G的品牌U盘,刷机成功率会高) 2、升级到结束,大约需要8-30分钟,中途绝对不能断电 3、升级重启第一次进入系统,请等完全正常进入开机桌面之后,才能拨下U盘 4、如无法升级,将Hisense 5505文件夹内“机型名.pkg”的文件重命名为“upgrade.pkg”,此时插上U盘开机,电视就会默认为强制升级模式

    node-v8.9.4-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    JavaScript_AI拟声 5秒内克隆您的声音并生成任意语音内容

    JavaScript

Global site tag (gtag.js) - Google Analytics