JavaScript 使用DOM操纵样式表

一 操作表格

<table>标签是HTML中结构最为复杂的一个,我们可以通过DOM来创建生成它,或者HTMLDOM来操作它;


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// 使用DOM来创建表格;

var table = document.createElement(‘table‘);

table.border = 1;

table.width = 300;

var caption = document.createElement(‘caption‘);

table.appendChild(caption);

caption.appendChild(document.createTextNode(‘人员表‘));

var thead = document.createElement(‘thead‘);

table.appendChild(thead);

var tr = document.createElement(‘tr‘);

thead.appendChild(tr);

var th1 = document.createElement(‘th‘);

var th2 = document.createElement(‘th‘);

tr.appendChild(th1);

th1.appendChild(document.createTextNode(‘姓名‘));

tr.appendChild(th2);

th2.appendChild(document.createTextNode(‘年龄‘));

document.body.appendChild(table);

// 表格较为复杂,层次也多,使用之前的DOM来获取某个元素会比较麻烦;推荐使用HTMLDOM;
HTMLDOM 属性和方法介绍
属性或方法 说明
caption 保存着<caption>元素的引用;
tBodies 保存着<tbody>元素的HTMLCollection集合;
tFoot 保存着对<tfoot>元素的引用;
tHead 保存着对<thead>元素的引用;
rows 保存着对<tr>元素的HTMLCollection集合;
createTHead() 创建<thead>元素,并返回引用;
createTFoot() 创建<tfoot>元素,并返回引用;
createCpation() 创建<caption>元素,并返回引用;
deleteTHead() 删除<thead>元素;
deleteTFoot() 删除<tfoot>元素;
deleteCaption() 删除<caption>元素;
deleteRow(pos) 删除指定的行;
insertRow(pos) 向rows集合中的指定位置插入一行;

<tbody>元素添加的属性和方法
rows 保存着<tbody>元素中行的HTMLCollection;
deleteRow(pos) 删除指定位置的行;
insertRow(pos) 向rows集合中的指定位置插入一行;

<tr>元素添加的属性和方法
cells 保存着<tr>元素中单元格的HTMLCollectioin集合;
deleteCell(pos) 删除指定位置的单元格;
insertCell(pos) 向cells集合的指定位置插入一个单元格,并返回引用;

// HTMLDOM获取表格的<caption>
alert(table.caption.innerHTML); // 获取caption的内容;

// PS:在一个表格中<thead>和<tfoot>是唯一的,只能有一个;
// 而<tbody>不是唯一的,可以是多个,这样导致最后返回的<thead>和<tfoot>是元素引用;而<tbody>是元素集合;

二 操作样式

CSS作为(X)HTML的辅助,可以增强页面的显示效果,但不是每个浏览器都能支持最新的CSS能力;
CSS的能力和DOM级别密切相关,所以需要检测当前浏览器的支持CSS能力的级别;
在HTML中定义样式的方式有3种:
(1).使用style特性定义针对特定元素的样式;
(2).使用<style/>元素定义嵌入式样式;
(3).通过<link/>元素包含外部样式表文件;1 // DOM1级实现了最基本的文档处理,DOM2和DOM3在这个基础上增加了更多的交互能力;
DOM2增加了CSS编程访问方式和改变CSS样式信息;
检测浏览器是否支持DOM1级CSS能力或DOM2级CSS能力
alert(‘DOM1级CSS能力:‘+document.implementation.hasFeature(‘CSS‘,‘2.0‘));
alert(‘DOM2级CSS能力:‘+document.implementation.hasFeature(‘CSS2‘,‘2.0‘));

1.访问元素的样式

(1).style特性/对象
// 任何HTML元素标签都会有一个通用的属性:style,它会返回CSSStyleDeclaration对象;
CSS属性及JavaScript调用
CSS属性 JavaScript调用
color style.color
font-size style.fontSize
float style.cssFloat(非IE)
float style.styleFloat(IE)
var box = document.getElementById(‘box‘);
box.style; // CSSStyleDecaration;
box.style.color; // red;
box.style.fontSze; // 20px;
// 兼容IE的float操作;
typeof box.style.cssFloat != ‘undefined‘ ? box.style.cssFloat = ‘right‘ : box.style.styleFloat = ‘right‘;

DOM2级样式规范为style对象定义属性和方法
属性或方法 说明
cssText 访问或设置style中的CSS代码;
box.style.cssText; // 获取CSS代码;
// PS:style属性仅仅只能获取行内的CSS样式,对于另外两种形式内联<style>和链接<link>方法则无法获取到;

(2).计算后的样式:getComputedStyle/currentStyle
// 虽然可以通过style来获取单一值的CSS样式,但对于复合值的样式信息,就需要通过计算样式来获取;
// DOM2级样式,window对象下提供了getComputedStyle()方法:接收两个参数,需要计算的样式元素,和伪类(:hover);如果没有伪类,则null;
// getComputedStyle()方法返回一个CSSStyleDeclaration对象;(与style属性的类型相同);其中包含当前元素的所有计算的样式;
// PS:IE不支持这个DOM2级的方法,但有个类似的属性可以使用currentStyle属性;
var box = document.getElementById(‘box‘);
var style = window.getComputedStyle ? window.getComputedStyle(box,null) : null ||box.currentStyle;
alert(style.color); // 颜色在不同的浏览器会有不同rgb()格式;
alert(style.border); // 不同浏览器不同的结果;
alert(sytle.fontFamily); // 计算显示复合的样式值;
// PS:border属性是一个综合属性,所以它在Chrome显示了,Firefox为空,IE为undefined;
// 所以,DOM在获取CSS的时候,最好采用完整写法兼容性最好;比如:border-top-color;

2.操作样式表


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

// 使用style属性可以设置行内的CSS样式,而通过id和class调用是最常用的方法;

box.className = ‘red‘; // 通过className关键字来设置样式;

// 添加多个className函数:

// 判断是否存在这个class;

function hasClass(element,className){

return element.className.match(new RegExp(‘(\\s|^)‘+className+‘(\\s|$)‘));

}

// 添加一个class,如果不存在的话;

function addClass(element,className){

if(!hasClass(element,className)){

element.className += " "+className;

}

}

// 删除一个class,如果存在的话;

function removeClass(element,className){

if(hasClass(element,className)){

element.className = element.className.replace(new RegExp(‘(\\s|^)‘+className+‘(\\s|$)‘),‘‘);

}

}

// 之前使用style属性,仅仅只能获取和设置行内的样式;

// 然后学习的getComputedStyle和currentStyle,只能获取却不能设置;

(1).获得CSSStyleSheet
// CSSStyleSheet类型可以通过<link>元素和<style>元素包含的样式表;
document.implementation.hasFeature(‘StyleSheet‘,‘2.0‘); // 是否支持DOM2级样式表;
document.getElementsByTagName(‘link‘)[0]; // HTMLLinkElement;
document.getElementsByTagName(‘style‘)[0]; // HTMLStyleElement;
// 这两个元素本身返回的是HTMLLinkElement和HTMLStyleElement类型;但CSSStyleSheet类型更加通用一些;
// 得到这个类型非IE使用sheet属性,IE使用styleSheet;
var link = document.getElementsByTagName(‘link‘)[0];
var sheet = link.sheet || link.styleSheet; // 得到CSSStyleSheet;

(2).CSSStyleSheet对象的属性和方法
CSSStyleSheet属性或方法
属性或方法 说明
disabled 获取和设置样式表是否被禁用;
href 如果是通过<link>包含的,则样式表为URL,否则为null;
media 样式表支持的所有媒体类型的集合;
ownerNode 指向拥有当前样式表的指针;
parentStyleSheet @import导入的情况下,得到父CSS对象;
title ownerNode中title属性的值;
type 样式表类型字符串;
cssRules 样式表包含样式规则的集合,IE不支持; IE为rules;12 ownerRule @import导入的情况下,指向表示导入的规则,IE不支持;
deleteRule(index) 删除cssRules集合中指定位置的规则,IE不支持;
insertRule(rule,index) 向cssRules集合中指定位置插入rule字符串,IE不支持;

sheet.disabled; // false; 可设置为true;
sheet.href; // css的URL;
sheet.media; // MediaList,集合;
sheet.title; // 得到title属性的值;
sheet.cssRules; // CSSRuleList,样式表规则集合;
sheet.deleteRule(0); // 删除第一个样式规则;
sheet.insertRule("body {background-color:red}",0); // 在第一个位置添加一个样式规则;

// PS:IE中不支持的属性和方法,IE有替代版本;
sheet.rules; // 代替cssRules的IE版本;
sheet.removeRule(0); // 代替deleteRule的IE版本;
sheet.addRule("body","{background-color:red",0); // 代替insertRule的IE版本;

// 除了刚才的方法可以得到CSSStyleSheet类型,还有一种方法是通过document的styleSheets属性来获取;
document.styleSheets; // StyleSheetList,集合;
var sheet = docuemnt.styleSheets[0]; // CSSStyleSheet,第一个样式表对象;


1

2

3

4

5

6

7

8

9

10

11

12

// 添加CSS规则,并兼容所有浏览器函数;

var sheet = docuemnt.styleSheets[0];

insertRule(sheet,"body","background-color:red;",0);

function insertRule(sheet,selectorText,cssText,postion){

// 如果是非IE;

if(sheet.insertRule){

sheet.insertRule(selectorText+"{"+cssText+"}",postion);

// 如果是IE

}else if(sheet.addRule){

sheet.addRule(selectorText,cssText,postion);

}

}

(3).CSSRules样式表规则集合列表;
// 通过CSSRules属性(非IE)和rules属性(IE),我们可以获得样式表的规则集合列表;
// 这样我们就可以对每个样式进行具体的操作了;
var sheet = docuemnt.styleSheets[0]; // CSSStyleSheet;
var rules = sheet.cssRules || sheet.rules; // CSSRuleList,样式表的规则集合列表;
var rule = rules[0]; // CSSStyleRule,样式表的第一个规则;
CSSRules的属性
属性 说明
cssText 获取当前整体规则对应的文本,IE不支持;
parentRule @import导入的,返回规则或null,IE不支持;
parentStyleSheet 当前规则的样式表,IE不支持;
selectorText 获取当前规则的选择符文本;
style 返回CSSStyleDeclaration对象,可以获取和设置样式;
type 表示规则的常量值,对于样式规则,值为1,IE不支持;

rule.cssText; // 当前规则的样式文本;
rule.selectorText; // #box;样式的选择符;
rule.style.color; // red;得到具体样式值;
rule.style.backgroundColor = "green"; // 修改某一条规则的样式信息;

时间: 2024-10-10 07:56:16

JavaScript 使用DOM操纵样式表的相关文章

使用Dom操纵样式表

XHTML中的每个元素对象都有一个属性对象style,该对象包含了元素的所有CSS样式.对于每个CSS样式,style对象都有相关的属性与之对应,只是格式有所不同:对单个词的CSS样式,style对象用相同的属性名对应(CSS中的color对应style.color):对于两个词的样式,style对象用去掉两个词之间的连接线,并且第二个词的首字母大些的属性名对应(CSS中的background_color样式对应style.backgroundColor). 下面是几个常用的CSS样式和styl

DOM 操纵样式表

CSS对应的JavaScript样式属性:background—color/style.backgroundColor,color/style.color,font/style.font,font-family/style.fontFamily,font-weight/style.fontWeight. 一.局部改变样式 分为改变直接样式,改变className和改变cssText三种.需要注意的是: 注意大小写: javascript对大小写十分敏感,className不能够把“N”写成“n”

第一百一十六节,JavaScript,DOM操作样式

JavaScript,DOM操作样式 一.操作样式 CSS作为(X)HTML的辅助,可以增强页面的显示效果.但不是每个浏览器都能支持最新的CSS能力.CSS的能力和DOM级别密切相关,所以我们有必要检测当前浏览器支持CSS能力的级别. DOM1级实现了最基本的文档处理,DOM2和DOM3在这个基础上增加了更多的交互能力,这里我们主要探讨CSS,DOM2增加了CSS编程访问方式和改变CSS样式信息. DOM一致性检测 功能 版本号 说明 Core 1.0.2.0.3.0 基本的DOM,用于表现文档

JavaScript访问修改css样式表

1.访问元素中style属性的css样式 可以根据属性的ID或name标签利用dom操作直接访问到内部的css样式,直接使用style对象访问 <div id="myid" style="backgroundColor:blue;"></div> <script type="text/javascript"> var mydiv1=document.getElementById("myid"

JavaScript脚本化CSS样式表

在使用JavaScript脚本化操作CSS样式表的时候,必须要使用到两个对象: 1,元素对象:也就是<link>元素与<style>元素. 2,CSSStyleSheet对象:与当前文档关联的在一起的样式表,通过document.styleSheets获取,该对象是只读的类数组对象(由CSSStyleSheet对象组成的类数组). 注:可以通过在<link>与<style>元素中添加title属性,这样返回的CSSStyleSheet对象中的title属性可

DOM操作样式表

1.操作Style样式属性 1.1通过style对象的属性 document.getElementById("bbb").style.backgroundColor="red"; //由style的属性值访问或者获得的是内联样式 1.2通过style对象的方法//由于IE不支持,所以用第一种方法较好 getPropertyValue(propertyName);//用CSS属性中的写法:background-color getPropertyPriority();

JavaScript 获取dom外联样式

以前都是用jquery获取,后来写了个组件遇到这个问题,才发现这里面大有文章! 代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>获取dom外链样式</title> <style> .div{font:14px/22px arial;color:#666;border:10px so

检测屏幕宽度,更换样式表

一.通过js检测屏幕宽度,更换样式表 1.javascript更改页面样式表的方法 <!doctype html> <html> <head> <meta charset="utf-8"> <title>javascript更改页面样式表的方法</title> <link id="mylink" rel="stylesheet" href="1.css&quo

JavaScript 客户端JavaScript之样式表操作(DOM API 提供模块之一)

层叠样式 表和动态HTML 层叠样式表(CSS)是指定HTML文档或XML文档的表现的标准. 使用CSS和Javascript,可以创建出各种视觉效果,这些效果可以统称为动态HTML(DHTML) CSS样式是一个名称/值的属性列表指定的,属性之间用分号隔开,名字属性和值属性之间用冒号隔开. 1.给文档元素应用样式规则(两种方法) a.在HTML标记的style属性中使用它们.如:<p style=margin-left:Lin;margin-right:lin;"/> b.使用样式