JS非行间样式获取函数的实例代码


Posted in Javascript onJune 05, 2018

行间样式:元素内部用style定义的样式,如:<div style="width:200px;"></div>

非行间样式:在<style></style>内通过css定义的样式

先看一段出问题的代码

<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="UTF-8"> 
    <title></title> 
  </head> 
  <style> 
    div{ 
      height: 100px; 
      width: 100px; 
      border: 2px solid black; 
      background: red; 
    } 
  </style> 
  <body> 
    <div id="div1" style=""> 
      宽 
    </div> 
  </body> 
  <script type="text/javascript" > 
    window.onload =function(){ 
      var oDiv1=document.getElementById('div1'); 
      oDiv1.onclick=function(){ 
        oDiv1.style.width=200+'px'; 
      } 
    } 
  </script> 
</html>

我在页面放了一个方块,红底黑边,想通过点击该方块让他的宽度变为200px,看一下结果——没有任何反应,也没有报错。

在事件中添加alert('a');有反应,说明onclick事件被触发了,那么就是

oDiv1.style.Width=200+'px';

这行代码有问题。

打印一下这个这个变量:

alert(oDiv1.style.Width);

虽然不报错,但是显示空白,即使用变量赋值之后任然无法获取这个值,真正的原因是style只能获取行间样式,试一下:

<!DOCTYPE html> 
<html> 
  <head> 
    <meta charset="UTF-8"> 
    <title></title> 
  </head> 
  <style> 
     
  </style> 
  <body> 
    <div id="div1" style="height: 100px; 
      width: 100px; 
      border: 2px solid black; 
      background: red;"> 
      宽 
    </div> 
  </body> 
  <script type="text/javascript" > 
    window.onload =function(){ 
      var oDiv1=document.getElementById('div1'); 
      oDiv1.onclick=function(){ 
        oDiv1.style.width=200+'px'; 
      } 
    } 
  </script> 
</html>

可以确定确实是行间样式与非行间样式的问题,实际上不可能把所有样式都写在行间。

要解决这个问题,需要引入两个元素属性——currentStyle和getComputedStyle(obj, false)

currentStyle——获取非行间(当前样式)IE浏览器专属,chrome和FF不兼容。

getComputedStyle(obj, false)——获取非行间(计算后的样式)IE不兼容。

<script type="text/javascript" > 
  window.onload =function(){ 
    var oDiv1=document.getElementById('div1'); 
    oDiv1.onclick=function(){ 
            //FF、chrome 
            alert(getComputedStyle(oDiv1, false).width); 
            //IE 
            alert(oDiv1.currentStyle.width); 
    } 
  } 
</script>

把他封装一下写成一个公用函数:

//obj:哪个元素 
//attr:那个样式 
function getStyle(obj,attr){ 
  if(obj.currentStyle){ 
    //IE 
    return obj.currentStyel[attr]; 
  }else{ 
    //FF 
    return getComputedStyle(obj, false)[attr]; 
  } 
}

通过判断obj.currentStyle是否为真来判断当前浏览器为IE还是其他。

注意:.width的写法可以写成['width']

总结

以上所述是小编给大家介绍的JS非行间样式获取函数的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于Web标准的UI组件 — 树状菜单(2)
Sep 18 Javascript
用Javascript实现Sleep暂停功能代码
Sep 03 Javascript
关于extjs4如何获取grid修改后的数据的问题
Aug 07 Javascript
Jquery中val()表单取值赋值的实例代码
Aug 15 Javascript
基于jquery实现无限级树形菜单
Mar 22 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
May 04 Javascript
详谈JS中实现种子随机数及作用
Jul 19 Javascript
Node之简单的前后端交互(实例讲解)
Nov 14 Javascript
css配合JavaScript实现tab标签切换效果
Oct 11 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
vue+echarts实现动态折线图的方法与注意
Sep 01 Javascript
JavaScript阻止事件冒泡的方法
Dec 06 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
Jun 05 #Javascript
Node错误处理笔记之挖坑系列教程
Jun 05 #Javascript
Vue项目中跨域问题解决方案
Jun 05 #Javascript
Vue多系统切换实现方案
Jun 05 #Javascript
jQuery实现的简单对话框拖动功能示例
Jun 05 #jQuery
vue2.0 自定义组件的方法(vue组件的封装)
Jun 05 #Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 #Javascript
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
模仿OSO的论坛(五)
2006/10/09 PHP
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
javascript操作referer详细解析
2014/03/10 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
js实现无缝滚动特效
2015/12/20 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
JavaScript必知必会(二) null 和undefined
2016/06/08 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
pandas的qcut()方法详解
2019/07/06 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
学生党员思想汇报范文
2014/01/09 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
教师个人剖析材料
2014/02/05 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL