JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)


Posted in Javascript onApril 07, 2012

http://www.cnblogs.com/TomXu/archive/2012/02/16/2351331.html , 在回来看这里文章,你一定会有更深刻的认识。因为我在这里介绍概念上的东西比较少,看下面的例子,对初学的朋友可能会有些吃力!

1、DOM的架构

<html> 
<head> 
<title>document</title> 
</head> 
<body> 
<h1>CSS Demo</h1> 
<p>我喜欢美女,特别是高个的美女</p> 
</body> 
</html>

这个文档的DOM表示如下图:

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)

图片表示一个HTML文档的树.

所有DOM树结构表现为不同种类的Node对象的一个数,firstChild,lastChild,nextSibling,previousSibling和ParentNode属性提供遍历节点的树的一种办法,appendChild,removeChild,replaceChildh和insertBefore这样的方法可以像文档中添加节点或者从文档中删除节点。不明白没关系接下来我将用大量的例子让你明白。

1、先创建一个使用CSS美化的列表
<style type="text/css"> 
body{ margin:0px; padding:0px; } 
#container{font-family:tahoma;font-size:14px;border:solid 1px #99ffcc; width:200px;height:140px; float:left; } 
#container ul{list-style:none;padding:1px 0px 0px 0px; margin:0px;} 
#container ul li{ border-bottom:solid 1px #99ffcc; margin:0px;height:27px;} 
#container ul li a{background-color:gray;text-decoration:none;display:block; border-left:solid 10px red;margin:0px; padding:5px 0px 5px 10px;} 
#container ul li a:hover{background-color:red; color:#000000; } 
</style>

2、加一个div 元素.
<div id="container"> 
<ul id="list"> 
<li><a href="#">Home</a></li> 
<li id="myblog"><a href="#">MyBlog</a></li> 
<li><a href="#">Sport</a></li> 
<li><a href="#">News</a></li> 
<li><a href="#">Contane</a></li> 
</ul> 
</div>

3、你现在应该看到如下图:

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)

4、根据上图获取元素总数
var Tools = {}; 
Tools.getElementCount = function(e){ 
var count =0; 
elementTotal(e); 
document.table.txt.value = "element:"+ count; 
function elementTotal(e) 
{ 
if(e.nodeType == 1) count++; 
var children = e.childNodes; 
for(var i = 0;i<children.length;i++) 
{ 
elementTotal(children[i]); 
} 
} 
};

备注:大家使用可以再body加入<button type ="button" onclick = "alert(Tools.getElementCount(document))">获取元素个数</button>
5、将文本全部大写
Tools.ModifyElement = function modify(e){ 
if(e.nodeType == 3) 
e.data = e.data.toUpperCase(); 
else 
{ 
for(var i = e.firstChild;i!=null;i=i.nextSibling) 
modify(i); 
} 
};

备注:大家使用可以再body加入<button type ="button" onclick = "Tools.ModifyElement(document)">大写</button>

效果:

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六) 

6、给列表排序
Tools.documentSort = function(e){ 
var textArray = []; 
if(typeof e =="string") e = document.getElementById(e); 
for(var x = e.firstChild; x!= null;x=x.nextSibling) 
if(x.nodeType == 1) textArray.push(x); 
textArray.sort(function(n,m){ 
var s = n.firstChild.firstChild.data; 
var t = m.firstChild.firstChild.data; 
if(s>t) return -1; 
else if(s<t) return 1; 
else return 0; 
});

备注:大家使用可以再body加入<button type ="button" onclick = "Tools.documentSort('list')">排序</button>

效果:

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)

7、动态插入列表项(子节点) 
Tools.insertElement = function(n,e){ 
if(typeof n == "string") n = document.getElementById(n); 
var li = document.createElement(e); 
var a = document.createElement("a"); 
a.setAttribute("href","#"); 
var txt = document.createTextNode("HotBlog"); 
a.appendChild(txt); 
li.appendChild(a); 
var parent = n.parentNode; 
parent.insertBefore(li,n); 
};

备注:大家使用可以再body加入<button type ="button" onclick="Tools.insertElement('myblog','li');">插入</button>

效果: 

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)

8、使用javascript类动态创建文档
1、样式表
.tooltip{background:url('2.jpg'); border:solid 1px #99ffcc; width:200px;height:200px;}//这里的图片大家要该一下 
.toolcontent{background-color:#ffffff; border:solid 1px #99ff00; padding:5px; font:tahoma 12px; color:#000000;}

2、javascript类
function Tooltip() 
{ 
this.tooltip = document.createElement("div"); 
this.tooltip.style.position = "absolute"; 
this.tooltip.className = "tooltip"; 
this.content = document.createElement("div"); 
this.content.style.position = "relative"; 
this.content.className = "toolcontent"; 
this.tooltip.appendChild(this.content); 
} 
Tooltip.prototype.show = function(text,x,y) 
{ 
this.content.innerHTML = text; 
this.tooltip.style.left = x+"px"; 
this.tooltip.style.top = y+"px"; 
this.tooltip.style.visibility = "visible"; 
if(this.tooltip.parentNode != document.body) 
document.body.appendChild(this.tooltip); 
}; 
Tooltip.prototype.hide = function(){ this.tooltip.style.visibility ="hidden";}; 
var t = new Tooltip(); 
function hide() 
{ 
t.hide(); 
} 
function show() 
{ 
t.show("hello ",300,0); 
} 
function init() 
{ 
document.operator.show.onclick = show; 
document.operator.hide.onclick = hide; 
}

备注:配合上面使用必须还完成以下步骤:1、将body中的onload=init();2 在body中添加 :
<form name = "operator">
<input type = "button" value = "隐藏" name = "hide"/>
<input type = "button" value = "显示" name = "show">
</form>
效果:(隐藏看到什么了) 

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)

9、动态添加样式和删除样式

1、样式表

.container{font-family:tahoma;font-size:14px;border:solid 1px #99ffcc; width:200px;height:140px;float:left;} 
.container ul{list-style:none;padding:1px 0px 0px 0px; margin:0px;} 
.container ul li{ border-bottom:solid 1px #99ffcc; margin:0px;height:27px;} 
.container ul li a{background-color:gray;text-decoration:none;display:block; border-left:solid 10px red;margin:0px; padding:5px 0px 5px 10px;} 
.container ul li a:hover{background-color:red; color:#ffffff; }

2、工具函数(动态添加、删除样式)
var CSSclass = {}; 
CSSclass.is = function(e,c){ 
if(typeof e == "string") e = document.getElementById(e); 
var classes = e.className; 
if(!classes) return false; 
if(classes == c) return true; 
return e.className.search("\\b" +c +"\\b*") != -1; 
}; 
CSSclass.add = function(e,c){ 
if(typeof e == "string") e = document.getElementById(e); 
if(CSSclass.is(e,c))return; 
//if(e.className) c=""+c; 
e.className += c; 
}; 
CSSclass.remove = function(e,c){ 
if(typeof e == "string") e = document.getElementById(e); 
//e.id = e.id.replace(new RegExp("\\b" +e.id +"\\b\\s*","g"),""); 
e.className = e.className.replace(new RegExp("\\b"+c+"\\b\\s*","g"),""); 
};

3、在body中加入如下元素
<div id="con"> 
<ul id="list"> 
<li><a href="#">Home</a></li> 
<li id="myblog"><a href="#">MyBlog</a></li> 
<li><a href="#">Sport</a></li> 
<li><a href="#">News</a></li> 
<li><a href="#">Content</a></li> 
</ul> 
<button type="button" name ="add" onclick = "CSSclass.add('con','container');">动态添加样式</button> 
<button type="button" name ="remove" onclick ="CSSclass.remove('con','container');">动态删除样式</button>

效果: 

JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
没添加样式的样子
JavaScript 高级篇之DOM文档,简单封装及调用、动态添加、删除样式(六)
加了样式之后。

小结:Dom文档操作、内联样式、动态设置样式等就给大家分享到这里吧!其实还有很多细节没给大家呈现。下一篇我将分享我学习事件的历程。

(很多没有备注,大家有问题可以给我留言!) 

Javascript 相关文章推荐
web页面数据展示新想法(json)
Jun 08 Javascript
js实现简单的购物车有图有代码
May 26 Javascript
javascript实现复选框超过限制即弹出警告框的方法
Feb 25 Javascript
贴近用户体验的Jquery日期、时间选择插件
Aug 19 Javascript
Javascript实现快速排序(Quicksort)的算法详解
Sep 06 Javascript
javascript实现密码验证
Nov 10 Javascript
基于Vue.js的表格分页组件
May 22 Javascript
json传值以及ajax接收详解
May 24 Javascript
JQuery 设置checkbox值二次无效的解决方法
Jul 22 Javascript
AngularJS基础 ng-repeat 指令简单示例
Aug 03 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
Oct 10 Javascript
JS内置对象和Math对象知识点详解
Apr 03 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 #Javascript
JavaScript 高级篇之函数 (四)
Apr 07 #Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
Apr 07 #Javascript
JavaScript 基础篇之运算符、语句(二)
Apr 07 #Javascript
为原生js Array增加each方法
Apr 07 #Javascript
jquery 操作DOM案例代码分享
Apr 05 #Javascript
jquery 操作DOM的基本用法分享
Apr 05 #Javascript
You might like
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP中file_exists()判断中文文件名无效的解决方法
2014/11/12 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
jquery获取多个checkbox的值异步提交给php的方法
2015/06/24 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
基于jquery的cookie的用法
2011/01/10 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
Js中将Long转换成日期格式的实现方法
2018/06/05 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
vue发送websocket请求和http post请求的实例代码
2019/07/11 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
pandas 选择某几列的方法
2018/07/03 Python
Django 实现购物车功能的示例代码
2018/10/08 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
python实现转圈打印矩阵
2019/03/02 Python
python 下 CMake 安装配置 OPENCV 4.1.1的方法
2019/09/30 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
青春励志演讲稿
2014/04/29 职场文书
法定代表人资格证明书
2014/09/11 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL