style设置/获取样式的问题 和 offsetWidth/offsetHeight的问题
style设置/获取样式的问题:
1.js通过style方法
--加样式:加的是行间样式 oDiv.style.width="20"+'px';
--取样式:取得是行间样式 alert(oDiv.style.width)
--当css写在样式表里(即css全部写在行外)的时候获取不到 --alert(oDiv.style.width)是错误的
行内样式的优先级最高,当js通过style方法添加了样式之后,
js再通过修改class的值为同一元素增加样式,最终行内样式优先起作用,
在写js时最好统一只操作style或者class,不要同时操作
2.如何获取元素的行外样式:(样式全写在style标签里,或者一个.css 文件里)
获取行外样式:
IE: currentStyle
Chrome,FF: getComputedStyle(oDiv,false).width
兼容两个浏览器的写法:
if(oDiv.currentStyle){
alert(oDiv.currentStyle.width);
}else{
alert(getComputedStyle(oDiv,false).width);
}
*注:在解决很多兼容性写法时,都是用if..else..
封装一个获取行外样式的函数:
funtion getStyle(obj,name){
if(obj.currentStyle){
//IE
return obj.currentStyle[name];
}else{
//Chrom,FF
return getComputedStyle(obj,false)[name];
}
}
调用:getStyle(oDiv,'width');
对于样式可分为:
单一样式:width,height,font-size等
复合样式:background,border
而currentStyle只能取单一样式,无法取复合样式
要想取:getStyle(oDiv,'backgroundColor');
3.通过js如何为元素修改class属性值/添加class属性
js中任何标签的任何属性都可以修改,修改时HTML里面怎么写js里面就怎么写,
document.getElementbyId('#box').style.background="red";
document.getElementbyId('#box').href="demo.css";
但是有一个例外,就是不可以这样修改class属性
修改时应该为document.getElementbyId('box').className='bigBox';
这样就为id为box的元素,添加了一个名为bigBox的class属性。
因为class为html 里面的关键字/保留字,不可以修改,
(所有的关键字/保留字都不可以修改)
4.js中两种操作属性的方法:
1)oTxt.value="111111"
2)oTxt['value']='1111'
在所有操作属性的方法中,第一种方法都可以用第二种方法代替,但是第一种方法比较方便
但元素属性作为函数的参数来传参时,操作属性只能用第二种方法,用第一种会有错误
function change(name,val){
var oDiv=document.getElementbyId('div');
oDiv['style'][name]=value;
}
<div id="div" onclick="change('background','red')"></div>
offsetWidth/offsetHeight的问题:
offset的知识点:
offsetWidth/offsetHeight/offsetLeft/offsetTop: 获取的都是盒模型尺寸
--获取元素距离'父元素'而言的距离(左边距,即获取物体的位置)
--综合考虑影响物体位置的因素(width,margin)
--使用时:只能获取,并不能设置'oDiv.offsetLeft=20px'是错误的,要通过odiv.style.left设置
offset的bug:
当使用 oDiv.style.width=oDiv.offsetwidth-4+'px' 来设置物体的样式时,最终物体的宽可能不变窄,反而会增加
应为offset获取的物体盒模型的样式,减掉之后可能比物体实际的宽要大
注**我们平时用oDiv.style.width=oDiv.offsetwidth-1+'px'
而不用oDiv.style.width=oDiv.style.width-4+'px' 是因为style只能取行间样式,
而我们平时的样式都写在外面的样式表里面,style的方法获取不到,所以用offset来获取,
但是当offset出现问题时,我们可以把样式写在样式表里面,通过
oDiv.style.width=oDiv.style.width-4+'px'来设置,但这种方法不是很好,不能实现表现层与结构层的分离,
所以我们可以通过上面封装的getStyle()函数获取行外样式,来代替offset,
var oDiv=document.getElementById('div1');
var wi=getStyle("oDiv","width");
oDiv.style.width=wi-10+'px'; //这种方法是最准确的获取和设置样式的方法
function getStyle(obj,styleName){
if(obj.currentStyle){
//IE
return obj.currentStyle[styleName];
}else{
//Chrom,FF
return getComputedStyle(obj,false)[styleName];
}
}
注:以后用offset时最好都换成使用这个函数,才不会出问题
style设置/获取样式的问题 和 offsetWidth/offsetHeight的问题的更多相关文章
- jQuery 设置/获取样式
参考 http://www.w3school.com.cn/jquery/jquery_css.asp $("#a").css("height"); $(&qu ...
- js 设置 获取css样式
先看一段代码,为了体现一会下面说的js用style获取css样式的不同 一:给div设置margin-left(用style设置css样式没什么问题) box.style.marginLeft=&qu ...
- 关于获取、设置css样式封装的函数入门版
<html> <head> <meta charset="UTF-8"> <title>CSS样式的获取和设置:简单版</ti ...
- getComputedStyle与currentStyle获取样式(style/class)
今天看jQuery源码CSS部分,里面用到了currentStyle和getComputedStyle来获取外部样式. 因为elem.style.width只能获取elem的style属性里的样式,无 ...
- 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式。
查看本章节 查看作业目录 需求说明: 使用 jQuery 选择器获取页面元素后,利用 jQuery 对象的 css() 方法设置其样式. 要求如下: 点击页面的"更改样式"按钮后, ...
- javascript中无法通过div.style.left获取值的问题
一.问题总结: 样式必须直接写在元素内部才能通过div.style.left直接获取属性值(也就是必须是内联样式才行),定义在css中的样式不能通过这种方式获取. 让元素移动到200停止 setTim ...
- JS获取样式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- JS设置CSS样式的几种方式
用JS来动态设置CSS样式,常见的有以下几种 1. 直接设置style的属性 某些情况用这个设置 !important值无效 如果属性有'-'号,就写成驼峰的形式(如textAlign) 如果想保 ...
- JS设置CSS样式的几种方式【转】
用JS来动态设置CSS样式,常见的有以下几种 1. 直接设置style的属性 某些情况用这个设置 !important值无效 如果属性有'-'号,就写成驼峰的形式(如textAlign) 如果想保 ...
随机推荐
- awk之特征相同行的合并 ~转
awk之特征相同行的合并 文本: 1001 hisk01 1001 hisk02 1001 hisk03 1002 hisk04 1002 hisk05 1002 hisk06 1003 ...
- URL地址中使用中文作为的参数【转】
原文:http://blog.csdn.net/blueheart20/article/details/43766713 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作 ...
- WebApp中的页面生命周期及路由管理
最近切换到一个新项目,使用的技术栈是Require+Backbone,鉴于对鞋厂webapp框架的了解,发现这个新项目有些缺陷,主要是单纯依赖Backbone造成的,也就是Backbone的好和坏都在 ...
- redis服务器
Redis是一个Key-Value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 string(字符串 ). list(链表). set(集合)和 zset(有序集合). ...
- server与Portal联合,portal许可过期无法登录。
server与Portal联合,portal许可过期无法登录,怎样解除联合. 解决方案由峥姐友情提供~~ (1)删除有两种方式(①/②选其一即可): ①类似 链接ttps://sunl.esrichi ...
- 用Arduino剖析PWM脉宽调制
PWM(Pulse Width Modulation)简介 PWM,也就是脉冲宽度调制,用于将一段信号编码为脉冲信号,也就是方波信号.多用于在数字电路中驱动负载随时间变化的电子元件,如LED,电机等. ...
- shell -vim
编辑文件 vim vim 1.txt 点击i进入编辑模式 如果发现按上下左右有问题的且出现乱码的话,可能是编码格式不对导致的,在crt或者是xshell设置一下编码格式就行. 保存是点击ecs先退到预 ...
- 使用sql server 链接服务器
在我们的日常应用场景中经常会碰访问不同服务器上的数据库,即跨服务器访问操作不同的服务器上的SQL Sever数据库, 这个时候Sql Server的链接服务器就非常实用,创建SQL语句如下: --重新 ...
- keepalived mariadb 主主
场景描述 #安装数据库mariadb 主主模式 keepalived 调度#mysql1 192.168.30.99#mysql2 192.168.30.100#vip 192.168.30.101 ...
- 使用HTML5技术控制电脑或手机上的摄像头
移动设备和桌面电脑上的客户端API起初并不是同步的.最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上.其中一个应用接口技术就是getUserMedia API,它 ...