JS 操作Dom节点之样式

为了提高用户体验,我们经常会动态修改Dom节点的样式,各种浏览器差异比较大,我们如何应对?不断尝试,不断总结~!

1. style、getComputedStyle、currentStyle

内嵌样式:

<!--body --><div style="width: 30px;background-color: #ff6a00;">我就是傻里傻气的,完全素颜!</div>
1 //内联样式优先级最高,通过style获取的样式是最准确的
2 var elm = document.getElementById(‘J-demo‘);
3
4 //通常这样获取
5 elm.style.width
6 elm.style.backgroundColor

内联样式、外部样式:

<!--css-->
<link ref="stylesheet" href="demo.css">

<style>
    .demo {
        width: 30px;
        background-color: #ff6a00;
    }
</style>

<!--body -->
<div id="J-demo" class="demo">你想那么容易看我素颜?没那么容易...</div>
 1 var elm = document.getElementById(‘J-demo‘),
 2     elmStyle;
 3
 4 elm.style.xxx  //只能获取定义的内联样式
 5
 6 //如果标签没有定义相关的内联样式,应该这么办:
 7 elmStyle = elm.currentStyle ? elm.currentStyle.getAttribute(‘background-color‘) : window.getComputedStyle(elm, null).getPropertyValue(‘background-color‘);
 8
 9 getPropertyValue(name)   //name不要使用驼峰命名的名称
10 getAttribute(name)  //如果考虑该死的IE6, name 必须是驼峰命名的名称
11
12 //为什么不用下标[name]来获取属性值呢?
13 //浏览器对样式属性解释名称不一样,比如float,有的叫cssFloat,有的叫styleFloat

2. screen属性

//显示器可用宽度、高度,不包含任务栏
availWidth、availHeight

//显示器屏幕的宽度、高度
width、height

3. 元素视图方法、属性

 1 //让元素滚动到可视区域
 2 scrollIntoView()
 3
 4 //内容区域的左上角相对于整个元素左上角的位置(包括边框)
 5 clientLeft
 6 clientTop
 7
 8 //内容区域的高度和宽度,包括padding,不包括边框和滚动条
 9 clientWidth
10 clientHeight
11
12 //相对于最近的祖先定位元素的偏移值
13 offsetLeft
14 offsetTop
15
16 //第一个祖定位元素(用来计算offsetLeft和offsetTop的元素)
17 offsetParent
18
19 //ffsetParent元素只可能是下面这几种情况:
20 //1. <body>
21 //2. position不是static的元素
22 //3. <table>, <th> 或<td>,但必须要position: static
23
24 //整个元素的尺寸(包括边框)
25 offsetWidth
26 offsetHeight
27
28 //元素滚动的像素大小,可读可写
29 scrollLeft
30 scrollTop
31
32 //整个内容区域的宽高,包括隐藏部分
33 scrollWidth
34 scrollHeight
35 //兼容问题:当外层元素没有设置overflow,但内容超过外层元素宽高时,浏览器获取的值将不准确
36 //解决方法:对外层元素设置overflow属性

4. 鼠标位置

1 //鼠标相对于window的偏移
2 event.clientX
3 event.clientY
4
5 //鼠标相对于显示器屏幕的偏移坐标
6 event.screenX
7 event.screenY

.Thingking

学会这些通用的样式处理方法,操作Dom样式,制作出漂亮的页面style,将会更加得心应手。

Reference: http://www.quirksmode.org/dom/w3c_cssom.html

JS 操作Dom节点之样式,布布扣,bubuko.com

时间: 2024-10-08 19:34:52

JS 操作Dom节点之样式的相关文章

JavaScript操作DOM节点

DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网页上,组织页面(或文档)的对象被组织在一个树形结构中,用来表示文档中对象的标准模型就称为DOM.Document Object Model的历史可以追溯至1990年代后期微软与Netscape的“浏览器大战”,双方为了在JavaScript与JScript一决生死,于是大规模的赋予浏览器强大的功能.

JavaScript之jQuery-3 jQuery操作DOM(查询、样式操作、遍历节点、创建插入删除、替换、复制)

一.jQuery操作DOM - 查询 html操作 - html(): 读取或修改节点的HTML内容,类似于JavaScript中的innerHTML属性 文本操作 - text(): 读取或修改节点的文本内容,类似于JavaScript中的textContent属性 值操作 - val(): 读取或修改节点的value属性值,类似于 JavaScript 中的value值 属性操作 - attr(): 读取或者修改节点的属性 - removeAttr(): 删除节点的属性 二.jQuery操作

原生JS的DOM节点操作

DOM(Document Object Model/文档对象模型)是针对HTML和XML文档的一个API.DOM节点树:在文档中出现的空格.回车.标签.注释.文本.doctype.标签等都属于DOM节点. 操作DOM节点的方式无非就是:创建.添加(插入).移除.替换.查找(获取).克隆DOM节点. 创建文本节点:var newText = document.createTextNode('文本节点');创建标签节点:var newNode = document.createElement('di

动态操作DOM节点js实现

    近日再次翻看<javascript面向对象编程指南>这本书,读到浏览器环境一章,渐渐明白了js作为脚本语言,需要依托宿主环境来实现功能,从浏览器角度考虑,就是对浏览器的BOM和DOM的操作.DOM操作又可分为:访问.修改.删除.新建.每种操作都有独特的方法和属性.下面取dom节点的访问.新建和删除的功能实例来讲解(参考文章).     <INPUT LEFT: 392px; POSITION: absolute; TOP: 128px" type="butto

Js操作DOM的方式及获取浏览器的宽高

我们在为页面加入一些动态效果或实现一些脚本功能时,需要对文档body中的元素进行操作,也就是,我们需要使用js或jQuery来对dom操作.下面呢,我说一下js是怎样对dom操作的. document.write(),这既可以向文档输出文本,也可以写入代码来添加元素. 获取需要操作的元素: 利用id获取就是:document.getElementById("name"); 利用class获取就是:document.getElementsByClassName("name&qu

原生js操作DOM基础-笔记

原文参考http://mp.weixin.qq.com/s?__biz=MzU3MDA0NTMzMA==&mid=2247485490&idx=1&sn=15197b4b53e0669e4a017e54a31fb39c&source=41#wechat_redirect 使用原生js为了提高效率,纯js操作dom一 查询DOMdocument.querySelector()参数是任意css选择器格式,只会返回第一个匹配到值document.querySelectorAll(

为什么说js操作DOM很慢

为什么说js操作DOM会影响性能呢? 在浏览器中DOM得实现和ECMAScript是分离得. 在IE中EMCMAScript是实现在jscript.dll中,DOM实现在mshtml.dll中.在Chrome中使用Webkit中的WebCore处理DOM和渲染,ECMAScript是在V8引擎中实现的.其他浏览器也类似. 因此在使用js操作DOM的时候是通过js代码调用DOM的接口,这就相当于两个互相独立的模块发生交互,这样的性能损耗是非常高的. 然后影响DOM操作性能的主要原因是它会导致浏览器

原生js操作dom的方法

今天学习了原生js的dom节点的操作,就记录下来,仅供自己以后参考. 1)创建节点:除了可以使用createElement创建元素,也可以使用createTextNode创建文本节点. document.body指向的是<body>元素;document.documentElement则指向<html>元素 //创建节点    var createNode = document.createElement("div");    var createTextNod

原生JS获取DOM 节点到浏览器顶部的距离或者左侧的距离

关于js获取dom 节点到浏览器顶/左部的距离,Jquery里面有封装好的offset().top/offset().left,只到父级的顶/左部距离position().top/position().left: 原生写的话就是用获取节点,do while循环就可以了.代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta