表格.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("*");
}
};
分享到:
相关推荐
Elasticsearch是一个基于Lucene的分布式全文搜索引擎,提供灵活且高效的搜索和分析功能。通过HTTP请求和客户端库,用户可以索引和搜索文档,执行复杂查询,进行数据分析,并享受高亮显示等特性。其高级功能如复合查询、聚合分析、滚动搜索等,使其适用于各种数据处理和分析场景。Elasticsearch还具有强大的监控和日志功能,确保集群稳定运行。总之,Elasticsearch是企业级搜索和分析的理想选择。
介绍 对全国2019年1月至2023年12月的空气质量数据进行分析,绘制时间序列图,展示每月/每季度的平均AQI变化趋势。绘制不同省份和城市的平均AQI热力图。分析不同污染物的浓度分布和趋势。绘制空气质量等级分布图。 需求说明 对空气质量数据进行数据分析,并使用LSTM模型进行预测。 安装教程 pip install jupyter pip install numpy pandas matplotlib seaborn 使用说明 在项目路径下打开终端输入jupyter notebook就行
百问网linux桌面GUI,基于LVGL 8.x。
基于Vue开发的XMall商城前台页面 PC端.zip
2019年中国民航大学电子设计竞赛E题-自动导航运输车 全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考
游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP
(1)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图; (2)详细设计:定义相应的存储结构并写出各函数的伪码算法。 (3)程序编码:把详细设计的结果进二步求精为程序设计语言程序。 (4)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。 (5)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析; 效果表现为用户输入一串字符表示的先序序列,程序能够根据这个序列正确地建立二叉树,并通过中序线索化非递归遍历结果。这有助于验证二叉树结构和遍历算法的正确性,同时对于理解和操作二叉树数据结构非常有帮助。 程序的输出结果证明了其对二叉树操作的正确性和有效性。
一、准备工作 有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置 二、所用工具 1、芯片: STM32F407VET6 2、IDE: MDK-Keil软件 3、库文件:STM32F4xxHAL库 三、实现功能 实现用DMA读写SD卡内容
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提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
HTML5小游戏源码下载,JS小游戏源码下载,坦克大战,驴子跳,连连看,俄罗斯方块,圈泡泡,塔防,太空战舰,愤怒的小鸟,植物大战僵尸,水果忍者,扫雷,超级玛丽,打地鼠,坦克大战,麻将等JS小游戏源码下载,游戏开发教程,网页游戏,本地直接打开就可以玩。
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.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提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
蓝色大气IDC代理商分销管理系统商业平台源码 仿西部数码站.rar蓝色大气IDC代理商分销管理系统商业平台源码 仿西部数码站.rar
PHP开发虚拟资源在线交易平台程序源码 含多接口 支付功能.rarPHP开发虚拟资源在线交易平台程序源码 含多接口 支付功能.rar
Delphi作为一款功能强大的编程语言,以其直观易用的集成开发环境(IDE)和高效的编译器赢得了广大开发者的青睐。本文将对Delphi编程语言的特性、应用领域、编程环境、以及与其他编程语言的比较进行全面而深入的解析,并结合实际案例展示Delphi的编程实践。 Delphi是一种面向对象的编程语言,同时它也是一款可视化软件开发工具。Delphi最初由Borland公司推出,并在后续发展中被Embarcadero Technologies接手。其第一个版本发布于1995年,当时该软件还叫做Object Pascal,后来才更名为Delphi。 Delphi作为一款功能强大的编程语言,在应用程序开发领域具有广泛的应用前景。其直观易用的IDE、高效的编译器以及丰富的组件库为开发者提供了强大的支持。通过本文的解析和案例展示,我们可以看到Delphi在快速开发、跨平台性以及面向对象等方面的优势。随着技术的不断进步和需求的不断变化,相信Delphi将继续发挥其在应用程序开发领域的重要作用。
游戏开发资源,游戏UI,游戏GUI,游戏图标,PSD格式,XD格式,PNG下载,源文件,可编辑下载,游戏购物充值界面,宝石,图标,PS格式,AI格式等,游戏APP
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.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.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.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提高了应用性能,简化了开发流程,并且能更快地响应市场需求。