通过DOM脚本去设置样式信息


Posted in Javascript onSeptember 19, 2010

利用DOM脚本去设置样式信息:(by wushan)
在大多数场合,我们都用CSS去设置样式,但在某些特殊情况下,例如要根据元素在节点树里的位置来设置节点样式信息时,目前CSS还没办法做到这一点。但利用DOM就可以很轻易的完成。
例如:把一定样式施加到所有hl元素的下一兄弟节点(下一元素节点)上。这时候用CSS没办法确定位置,但用DOM的getElementsByTagName( )方法很容易就把所有hl元素后面的那个元素找出来,这时候只要对找出来的元素施加样式就可以了。以下是代码清单:

function styleHeaderSibling( ){ 
if(!document.getElementsByTagName) return false; 
//探测浏览器是否支持“getElementsByTagName”方法(个别浏览器并不支持DOM) 
var headers=document. getElementsByTagName(“hl”); 
for(var=0;i<headers.length;i++){ 
var elem=getNextElement(headers[i].nextSibling); 
elem.style.fontWeight=”bold”; 
elem.style.fontsize=”1.2em”; 
} 
} 
function getNextElement(node){ 
if(node.nodeType==1){ //此节点为文本节点 
return node; 

 } 

if(node.nextSibling){ 

retnrn getNextElement(node.nextSibling); 
  } 
return null; 
}

不足:让“行为层”去完成“表现层”工作,当需要改变DOM脚本设置的样式信息时,修改起来很麻烦,如果能给所要设置样式的节点声明一个class属性,那么修改起来就会很简单。例如我们可以对上述例子做出如下修改:
function styleHeaderSibling( ){ 
if(!document.getElementsByTagName) return false; 
//探测浏览器是否支持“getElementsByTagName”方法 
var headers=document. getElementsByTagName(“hl”); 
for(var=0;i<headers.length;i++){ 
var elem=getNextElement(headers[i].nextSibling); 
elem.className=”intro”; 
//给某元素设置class属性值的语法为:elements.className=value 
} 
}

由于此技巧有一不足之处:若该元素原本具有class属性值的话,那么原本的属性值就会被新的属性值所覆盖,原来的样式就会丢失,所有我们要在元class属性值的基础上追加新的属性值,而不是覆盖,方法如下:
function addClass(element,value){ 
if(!element.className){ 
element.className=value; 
 }else{ 
newclassName=element.className; 
newclassName +=" "; // 注意这个空格 
newclassName +=value; 
element.className=newclassName; 

} 
}

接着把上面的函数修改一下就可以了:
function styleHeaderSibling( ){ 
if(!document.getElementsByTagName) return false; 
//探测浏览器是否支持“getElementsByTagName”方法 
var headers=document. getElementsByTagName(“hl”); 
for(var=0;i<headers.length;i++){ 
var elem=getNextElement(headers[i].nextSibling); 
addClass(elem,”intro”); 
} 
}

说明:一般情况下,用DOM去设置样式是很不明智的,此方法只在CSS没办法按要求设置样式来充实页面内容的时候才用。

Javascript 相关文章推荐
js借助ActiveXObject实现创建文件
Sep 29 Javascript
jQuery表格排序组件-tablesorter使用示例
May 26 Javascript
超级好用的jQuery圆角插件 Corner速成
Aug 31 Javascript
网站基于flash实现的Banner图切换效果代码
Oct 14 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
Mar 04 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
Apr 12 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
Jan 12 Javascript
jQuery查看选中对象HTML代码的方法
Jun 17 Javascript
Javascript删除指定元素节点的方法
Jun 21 Javascript
Javascript中this关键字指向问题的测试与详解
Aug 11 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
Nov 02 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
javscript对象原型的一些看法
Sep 19 #Javascript
Ext 今日学习总结
Sep 19 #Javascript
JS面向对象编程 for Cookie
Sep 19 #Javascript
网络之美 JavaScript中Get和Set访问器的实现代码
Sep 19 #Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 #Javascript
jquery异步循环获取功能实现代码
Sep 19 #Javascript
JavaScript随机排序(随即出牌)
Sep 17 #Javascript
You might like
php 生成WML页面方法详解
2009/08/09 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
php session 写入数据库
2016/02/13 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
laravel学习教程之关联模型
2016/07/30 PHP
关于跨站脚本攻击问题
2011/12/22 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
微信小程序实现换肤功能
2018/03/14 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
Python 不同对象比较大小示例探讨
2014/08/21 Python
Python实现去除代码前行号的方法
2015/03/10 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
Python 稀疏矩阵-sparse 存储和转换
2017/05/27 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python实现随机漫步算法
2018/08/27 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
你对IPv6了解程度
2016/02/09 面试题
服装机修工岗位职责
2013/12/26 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
项目总经理岗位职责
2014/02/14 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL