dtree 网页树状菜单及传递对象集合到js内,动态生成节点


Posted in Javascript onApril 14, 2012

在winform端,树状菜单是非常有用的,实现这个是非常便捷的,所以我想到在页面放入一个树状菜单的。我选择了dtree这个工具,网络上还有很多方法实现页面树状菜单的,不过我觉得这个比较好用的,而且配置比较简单,运用上上手很快。dtree是纯js的,所以不用导入jar包,并且配置只要在js内配置就好了。而且现在网络上有很多高手修改后的改良版,加了checkbox,更加方便。在开发过程中,最难的就是数据的交互的,因为dtree是纯js的,所以不存在和后台交互的方法,我的办法是先通过后台交互,将数据传递到页面,然后再传递到js内。后台传递到页面的数据我拼接成一个字符串,然后在js内切割,将数据整合成数组。
后台数据处理代码:

Codepublic String GetLinkManByDID(){ 
try { 
directories = this.directoryService.GetAllDirecoty(); 
selectlinkMans = this.linkManService.GetAllLinkMans(); 
String direStringstring = ""; 
String linkString = ""; 
for (int i = 0; i < directories.size(); i++) { 
if (i<directories.size()-1) { 
direStringstring+=directories.get(i).getID()+"-"+directories.get(i).getDirectoryName()+"+"; 
} 
else { 
direStringstring+=directories.get(i).getID()+"-"+directories.get(i).getDirectoryName(); 
} 
} 
for (int i = 0; i < selectlinkMans.size(); i++) { 
if (i<selectlinkMans.size()-1) { 
linkString+=selectlinkMans.get(i).getDirectory().getID()+"-"+selectlinkMans.get(i).getName()+"-"+selectlinkMans.get(i).getPhoneNum()+"+"; 
} 
else { 
linkString+=selectlinkMans.get(i).getDirectory().getID()+"-"+selectlinkMans.get(i).getName()+"-"+selectlinkMans.get(i).getPhoneNum(); 
} 
} 
ActionContext.getContext().getSession().put("directories", direStringstring); 
ActionContext.getContext().getSession().put("allLinkMans", linkString); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
return SUCCESS; 
}

我是用s2sh款家的,所以数据存放到session中方式是
ActionContext.getContext().getSession().put(key, value)
然后页面得到数据:
<script type="text/javascript"> 
var linkmans= []; 
var dires = []; 
//linkmans = "${directories}".replace('[','').replace(']','').split(','); 
linkmans="${allLinkMans}".split(','); 
dires = "${directories}".split(','); 
treeload(linkmans[0],dires[0]); 
</script>

treeload 是我自己编写的一个js文件内的方法。
js:
Codefunction treeload(linkmans , dires){ 
var linklist= String2linklist(linkmans); 
var direslist = String2direlist(dires); 
d = new dTree('d','./'); 
d.config.checkbox=true;//显示checkbox 
d.config.objValueId='phoneNums'; 
d.icon.root='images/hr/home.png', 
d.icon.folder='images/hr/group.gif', 
d.icon.folderOpen='images/hr/group.gif', 
d.icon.node='images/hr/nan.gif', 
d.add(0,-1,'联系人',null); 
var int = 0; 
var direids = new Array(); 
var direpid= new Array(); 
for ( int; int < direslist.length; int++) { 
d.add(int+1,0,direslist[int].name,false); 
direids.push(direslist[int].id); 
direpid.push(int+1); 
} 
d.add(int+1,0,'全部联系人',false); 
direpid.push(int+1); 
for ( var int2 = 0; int2 < linklist.length; int2++) { 
for ( var int3 = 0; int3 < direpid.length-1; int3++) { 
if(linklist[int2].did==direids[int3]) 
{ 
int++; 
d.add(int+1,direpid[int3],linklist[int2].name,false,linklist[int2].phone); 
} 
} 
} 
for ( var int4 = 0; int4 < linklist.length; int4++) { 
int++; 
d.add(int+1,direpid[direpid.length-1],linklist[int4].name,false,linklist[int4].phone); 
} document.write(d); 
} 
function String2linklist(linkmans){ 
var linkarray = new Array(); 
var a = linkmans.split('+'); 
// alert(a[0]); 
for ( var int = 0; int < a.length; int++) { 
var b = a[int].split('-'); 
// alert(b[2]); 
linkarray.push(new linkman(b[0],b[1],b[2])); 
} 
return linkarray; 
} 
function String2direlist(dires){ 
var direlist = new Array(); 
var a = dires.split('+'); 
for ( var int = 0; int < a.length; int++) { 
var b = a[int].split('-'); 
// alert(b[1]); 
direlist.push(new dire(b[0],b[1])); 
} 
return direlist; 
} 
function linkman(Did,name,phone){ 
this.did = Did; 
this.name = name ; 
this.phone=phone; 
} 
function dire(id ,name){ 
this.id= id; 
this.name = name; 
}

最后,效果图

dtree 网页树状菜单及传递对象集合到js内,动态生成节点                               dtree 网页树状菜单及传递对象集合到js内,动态生成节点

我改写的dtree 的js:
// Node object 
function Node(id, pid, name, checked, value, icon ,url, title, target, iconOpen, open) { 
this.id = id; 
this.pid = pid; 
this.name = name; 
//是否在该节点添加复选框并设置选中状态,true:选中,false:不选中,null:不添加 
this.checked = checked==null?null:(checked || false); this.value = value;//增加value属性,选中复选框,输入框内得到的就是这个value值 
this.url = url; 
this.title = title; 
this.target = target; 
this.icon = icon; 
this.iconOpen = iconOpen; 
this._io = open || false; 
this._is = false; 
this._ls = false; 
this._hc = false; 
this._ai = 0; 
this._p; 
}; 
// Tree object 
function dTree(objName, path) { 
//路径 
this.path = path ||''; 
//加载css文件 
this.loadCssFile(this.path+'dtree.css'); 
this.config = { 
target : null, 
folderLinks : true, 
useSelection : true, 
useCookies : true, 
useLines : true, 
useIcons : true, 
useStatusText : false, 
closeSameLevel : false, 
inOrder : false, 
//是否显示复选框,true显示,false不显示 
checkbox:false, 
objValueId:'' 
} 
this.icon = { 
root : this.path + 'images/img/base.gif', 
folder : this.path + 'images/img/folder.gif', 
folderOpen : this.path + 'images/img/folderopen.gif', 
node : this.path + 'images/img/page.gif', 
empty : this.path + 'images/img/empty.gif', 
line : this.path + 'images/img/line.gif', 
join : this.path + 'images/img/join.gif', 
joinBottom : this.path + 'images/img/joinbottom.gif', 
plus : this.path + 'images/img/plus.gif', 
plusBottom : this.path + 'images/img/plusbottom.gif', 
minus : this.path + 'images/img/minus.gif', 
minusBottom : this.path + 'images/img/minusbottom.gif', 
nlPlus : this.path + 'images/img/nolines_plus.gif', 
nlMinus : this.path + 'images/img/nolines_minus.gif' 
}; 
this.obj = objName; 
this.aNodes = []; 
this.aIndent = []; 
this.root = new Node(-1); 
this.selectedNode = null; 
this.selectedFound = false; 
this.completed = false; 
}; 
//设置选中节点 
dTree.prototype.checkedNodes=function(){ 
if(this.config.objValueId==''){ 
return; 
} 
var val=document.getElementById(this.config.objValueId).value; 
if(val==''){ 
return; 
} 
val=val.split(','); 
var o=null; 
for(var i=0;i<val.length;i++){ 
o=document.getElementById('cbx_'+this.obj+val[i]); 
if(o){ 
o.checked=true; 
} 
} 
}; 
//实现输入框内自动输入选中项的value值 
dTree.prototype.update=function(){ 
if(this.config.objValueId==''){ 
return; 
} 
var cbx=null,v=[]; 
// v.push(aa); 
var ns=this.aNodes; 
for(var i=0;i<ns.length;i++){ 
cbx=document.getElementById('cbx_'+this.obj+ns[i].id); 
if(cbx){ 
if(cbx.checked){ 
if(ns[i].pid!='0'){ 
v.push(cbx.value);//原先是得到节点的id的,换成value,可以实现选中联系人,得到号码。 
} 
} 
} 
} 
document.getElementById(this.config.objValueId).value=v.join(); 
}; 
//加载css文件 
dTree.prototype.loadCssFile=function (file) { 
try{ 
var head=document.getElementsByTagName("head")[0]; 
var links=head.getElementsByTagName('link'); 
var i=0; 
for(var i=0;i<links.length;i++){ 
if(links[i].getAttribute('href').toLowerCase().indexOf(file.toLowerCase())>-1){ 
return; 
} 
} 
var f = document.createElement("link"); 
f.setAttribute("rel", "stylesheet"); 
f.setAttribute("type", "text/css"); 
f.setAttribute("href", file); 
head.appendChild(f); 
}catch(ex){ 
alert('加载css文件出错:'+ex.message); 
} 
}; 
// Adds a new node to the node array 
dTree.prototype.add = function(id, pid, name, checked, value,icon,url, title, target,iconOpen, open) { 
this.aNodes[this.aNodes.length] = new Node(id, pid, name, checked, value,icon,url, title, target, iconOpen, open); 
}; 
// Open/close all nodes 
dTree.prototype.openAll = function() { 
this.oAll(true); 
}; 
dTree.prototype.closeAll = function() { 
this.oAll(false); 
}; 
// Outputs the tree to the page 
dTree.prototype.toString = function() { 
var str = '<div class="dtree" id="dTree_'+this.obj+'">\n'; 
if (document.getElementById) { 
if (this.config.useCookies) this.selectedNode = this.getSelected(); 
str += this.addNode(this.root); 
} else str += 'Browser not supported.'; 
str += '</div>'; 
if (!this.selectedFound) this.selectedNode = null; 
this.completed = true; 
return str; 
}; 
// Creates the tree structure 
dTree.prototype.addNode = function(pNode) { 
var str = ''; 
var n=0; 
if (this.config.inOrder) n = pNode._ai; 
for (n; n<this.aNodes.length; n++) { 
if (this.aNodes[n].pid == pNode.id) { 
var cn = this.aNodes[n]; 
cn._p = pNode; 
cn._ai = n; 
this.setCS(cn); 
if (!cn.target && this.config.target) cn.target = this.config.target; 
if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id); 
if (!this.config.folderLinks && cn._hc) cn.url = null; 
if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) { 
cn._is = true; 
this.selectedNode = n; 
this.selectedFound = true; 
} 
str += this.node(cn, n); 
if (cn._ls) break; 
} 
} 
return str; 
}; 
// Creates the node icon, url and text 
dTree.prototype.node = function(node, nodeId) { 
var str = '<div class="dTreeNode">' + this.indent(node, nodeId); 
if (this.config.useIcons) { 
if (!node.icon) node.icon = (this.root.id == node.pid) ? this.icon.root : ((node.pid==0) ? this.icon.folder : this.icon.node); 
//node.pid==0 这个条件是我自己改的,如果群组内无人的话,还是用群组的icon,而不是联系人的icon,大家可以自己试试的 
if (!node.iconOpen) node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node; 
if (this.root.id == node.pid) { 
node.icon = this.icon.root; 
node.iconOpen = this.icon.root; 
} 
str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />'; 
} 
/***添加checkbox显示***/ 
if(this.config.checkbox&&node.checked!=null){ 
str += '<input '+ (node.checked?'checked=\"checked\"':'') +' onclick=\"javascript: ' + this.obj + (node._hc &&node.pid != this.root.id?'.o(' + nodeId + ')':'.update()')+';\" type=\"checkbox\" value=\"'+node.value+'\" name=\"cbx_'+this.obj+'\" id=\"cbx_'+ this.obj + nodeId+'\" title=\"'+node.name+'\"\/>'; 
} 
if (node.url) { 
str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"'; 
if (node.title) str += ' title="' + node.title + '"'; 
if (node.target) str += ' target="' + node.target + '"'; 
if (this.config.useStatusText) str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" '; 
if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc)) 
str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"'; 
str += '>'; 
} 
else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id) 
str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">'; 
str += node.name; 
if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>'; 
str += '</div>'; 
if (node._hc) { 
str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">'; 
str += this.addNode(node); 
str += '</div>'; 
} 
this.aIndent.pop(); 
return str; 
}; 
// Adds the empty and line icons 
dTree.prototype.indent = function(node, nodeId) { 
var str = ''; 
if (this.root.id != node.pid) { 
for (var n=0; n<this.aIndent.length; n++) 
str += '<img src="' + ( (this.aIndent[n] == 1 && this.config.useLines) ? this.icon.line : this.icon.empty ) + '" alt="" />'; 
(node._ls) ? this.aIndent.push(0) : this.aIndent.push(1); 
if (node._hc) { 
str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');"><img id="j' + this.obj + nodeId + '" src="'; 
if (!this.config.useLines) str += (node._io) ? this.icon.nlMinus : this.icon.nlPlus; 
else str += ( (node._io) ? ((node._ls && this.config.useLines) ? this.icon.minusBottom : this.icon.minus) : ((node._ls && this.config.useLines) ? this.icon.plusBottom : this.icon.plus ) ); 
str += '" alt="" /></a>'; 
} else str += '<img src="' + ( (this.config.useLines) ? ((node._ls) ? this.icon.joinBottom : this.icon.join ) : this.icon.empty) + '" alt="" />'; 
} 
return str; 
}; 
// Checks if a node has any children and if it is the last sibling 
dTree.prototype.setCS = function(node) { 
var lastId; 
for (var n=0; n<this.aNodes.length; n++) { 
if (this.aNodes[n].pid == node.id) node._hc = true; 
if (this.aNodes[n].pid == node.pid) lastId = this.aNodes[n].id; 
} 
if (lastId==node.id) node._ls = true; 
}; 
// Returns the selected node 
dTree.prototype.getSelected = function() { 
var sn = this.getCookie('cs' + this.obj); 
return (sn) ? sn : null; 
}; 
// Highlights the selected node 
dTree.prototype.s = function(id) { 
if (!this.config.useSelection) return; 
var cn = this.aNodes[id]; 
if (cn._hc && !this.config.folderLinks) return; 
if (this.selectedNode != id) { 
if (this.selectedNode || this.selectedNode==0) { 
eOld = document.getElementById("s" + this.obj + this.selectedNode); 
eOld.className = "node"; 
} 
eNew = document.getElementById("s" + this.obj + id); 
eNew.className = "nodeSel"; 
this.selectedNode = id; 
if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id); 
} 
}; 
// Toggle Open or close 
dTree.prototype.o = function(id) { 
var cn = this.aNodes[id]; 
this.nodeStatus(!cn._io, id, cn._ls); 
cn._io = !cn._io; 
if (this.config.closeSameLevel) this.closeLevel(cn); 
if (this.config.useCookies) this.updateCookie(); 
//更新选中值if(this.config.objValueId!='') 
this.update(); 
}; 
// Open or close all nodes 
dTree.prototype.oAll = function(status) { 
for (var n=0; n<this.aNodes.length; n++) { 
if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) { 
this.nodeStatus(status, n, this.aNodes[n]._ls) 
this.aNodes[n]._io = status; 
} 
} 
if (this.config.useCookies) this.updateCookie(); 
}; 
// Opens the tree to a specific node 
dTree.prototype.openTo = function(nId, bSelect, bFirst) { 
if (!bFirst) { 
for (var n=0; n<this.aNodes.length; n++) { 
if (this.aNodes[n].id == nId) { 
nId=n; 
break; 
} 
} 
} 
var cn=this.aNodes[nId]; 
if (cn.pid==this.root.id || !cn._p) return; 
cn._io = true; 
cn._is = bSelect; 
if (this.completed && cn._hc) this.nodeStatus(true, cn._ai, cn._ls); 
if (this.completed && bSelect) this.s(cn._ai); 
else if (bSelect) this._sn=cn._ai; 
this.openTo(cn._p._ai, false, true); 
}; 
// Closes all nodes on the same level as certain node 
dTree.prototype.closeLevel = function(node) { 
for (var n=0; n<this.aNodes.length; n++) { 
if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc) { 
this.nodeStatus(false, n, this.aNodes[n]._ls); 
this.aNodes[n]._io = false; 
this.closeAllChildren(this.aNodes[n]); 
} 
} 
} 
// Closes all children of a node 
dTree.prototype.closeAllChildren = function(node) { 
for (var n=0; n<this.aNodes.length; n++) { 
if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc) { 
if (this.aNodes[n]._io) this.nodeStatus(false, n, this.aNodes[n]._ls); 
this.aNodes[n]._io = false; 
this.closeAllChildren(this.aNodes[n]); 
} 
} 
} 
// Change the status of a node(open or closed) 
dTree.prototype.nodeStatus = function(status, id, bottom) { 
try{ 
eDiv = document.getElementById('d' + this.obj + id); 
eJoin = document.getElementById('j' + this.obj + id); 
//****选择 
if(this.config.checkbox){ 
cbx = document.getElementById('cbx_' + this.obj + id); 
cbx.checked=status; 
cbxChild= eDiv.getElementsByTagName('input'); 
for(var i=0 ;i<cbxChild.length;i++){ 
cbxChild[i].checked=status; 
} 
} 
//****选择 
if (this.config.useIcons) { 
eIcon = document.getElementById('i' + this.obj + id); 
eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon; 
} 
eJoin.src = (this.config.useLines)? 
((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus)): 
((status)?this.icon.nlMinus:this.icon.nlPlus); 
eDiv.style.display = (status) ? 'block': 'none'; 
}catch(ex){ 
} 
}; 
// [Cookie] Clears a cookie 
dTree.prototype.clearCookie = function() { 
var now = new Date(); 
var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24); 
this.setCookie('co'+this.obj, 'cookieValue', yesterday); 
this.setCookie('cs'+this.obj, 'cookieValue', yesterday); 
}; 
// [Cookie] Sets value in a cookie 
dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) { 
document.cookie = 
escape(cookieName) + '=' + escape(cookieValue) 
+ (expires ? '; expires=' + expires.toGMTString() : '') 
+ (path ? '; path=' + path : '') 
+ (domain ? '; domain=' + domain : '') 
+ (secure ? '; secure' : ''); 
}; 
// [Cookie] Gets a value from a cookie 
dTree.prototype.getCookie = function(cookieName) { 
var cookieValue = ''; 
var posName = document.cookie.indexOf(escape(cookieName) + '='); 
if (posName != -1) { 
var posValue = posName + (escape(cookieName) + '=').length; 
var endPos = document.cookie.indexOf(';', posValue); 
if (endPos != -1) cookieValue = unescape(document.cookie.substring(posValue, endPos)); 
else cookieValue = unescape(document.cookie.substring(posValue)); 
} 
return (cookieValue); 
}; 
// [Cookie] Returns ids of open nodes as a string 
dTree.prototype.updateCookie = function() { 
var str = ''; 
for (var n=0; n<this.aNodes.length; n++) { 
if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) { 
if (str) str += '.'; 
str += this.aNodes[n].value; 
} 
} 
this.setCookie('co' + this.obj, str); 
}; 
// [Cookie] Checks if a node id is in a cookie 
dTree.prototype.isOpen = function(id) { 
var aOpen = this.getCookie('co' + this.obj).split('.'); 
for (var n=0; n<aOpen.length; n++) 
if (aOpen[n] == id) return true; 
return false; 
}; 
// If Push and pop is not implemented by the browser 
if (!Array.prototype.push) { 
Array.prototype.push = function array_push() { 
for(var i=0;i<arguments.length;i++) 
this[this.length]=arguments[i]; 
return this.length; 
} 
}; 
if (!Array.prototype.pop) { 
Array.prototype.pop = function array_pop() { 
lastElement = this[this.length-1]; 
this.length = Math.max(this.length-1,0); 
return lastElement; 
} 
};

大家可以借鉴一下,自己弄个小工程试试,dtree还是不错的。
Javascript 相关文章推荐
js几秒以后倒计时跳转示例
Dec 26 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
JavaScript Promise启示录
Aug 12 Javascript
JQuery中节点遍历方法实例
May 18 Javascript
js中利用tagname和id获取元素的方法
Jan 03 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 Javascript
JavaScript实现页面定时刷新(定时器,meta)
Oct 12 Javascript
EL表达式截取字符串的函数说明
Sep 22 Javascript
vue进入页面时滚动条始终在底部代码实例
Mar 26 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 Javascript
Vue中 axios delete请求参数操作
Aug 25 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 #Javascript
深入理解JavaScript系列(16) 闭包(Closures)
Apr 12 #Javascript
深入理解JavaScript系列(15) 函数(Functions)
Apr 12 #Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 #Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 #Javascript
window.parent与window.openner区别介绍
Apr 12 #Javascript
JavaScript单元测试ABC
Apr 12 #Javascript
You might like
第十四节 命名空间 [14]
2006/10/09 PHP
利用PHP实现与ASP Banner组件相似的类
2006/10/09 PHP
php下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
2019/12/20 PHP
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
2017/11/10 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
python实现文件名批量替换和内容替换
2014/03/20 Python
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
机电工程学生自荐信范文
2013/12/07 职场文书
实验教师岗位职责
2014/02/13 职场文书
医学专业毕业生推荐信
2014/07/12 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
企业2014年度工作总结
2014/12/10 职场文书
技术支持岗位职责
2015/02/13 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript