通过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实现一个页面多个css样式实现
May 29 Javascript
js 页面输出值
Nov 30 Javascript
Array.prototype 的泛型应用分析
Apr 30 Javascript
Javascript 页面模板化很多人没有使用过的方法
Jun 05 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
Dec 09 Javascript
JavaScript中的对象序列化介绍
Dec 30 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
JavaScript数组实现数据结构中的队列与堆栈
May 26 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
Jun 07 Javascript
webpack 模块热替换原理
Apr 09 Javascript
tweenjs缓动算法的使用实例分析
Aug 26 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 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去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
深入分析php之面向对象
2013/05/15 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
PHP借助phpmailer发送邮件
2015/05/11 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
ie9 提示'console' 未定义问题的解决方法
2014/03/20 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
在vue-cli中组件通信的方法
2017/12/16 Javascript
解决Layui数据表格的宽高问题
2019/09/28 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
js实现鼠标点击飘爱心效果
2020/08/19 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python中的异常处理简明介绍
2015/04/13 Python
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
教师推荐信范文
2013/11/24 职场文书
中式面点餐厅创业计划书
2014/01/29 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
升学宴演讲稿
2014/09/01 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
售票员岗位职责
2015/02/15 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
新郎婚礼致辞
2015/07/27 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS