DOM2和DOM3

只写一些DOM2和DOM3中我目前能用到的点,更多细节会以后补上

一.DOM变化

1.DOM2级为不同的DOM类型引入了一些与XML命名空间有关的方法(对HTML文档没有实际意义)。

2.定义了以编程方式创建Document实例的方法

3.支持创建DocumentType对象

二.样式

测试浏览器是否支持DOM2级定义的CSS能力

var supportsDOM2CSS2=document.implementation.hasFeature(“CSS2”,"2.0”);

1.访问元素的内联样式

HTML元素的style特性中的信息分别对应JS中style对象的属性。这个style对象只包含内联样式的信息。使用短划线(如background-image)的CSS属性名,要转换成驼峰大小写形式才能通过JS来访问(style.backgroundImage)。

有一个特殊的CSS属性:float属性,要转换成cssFloat

<div id="myDiv" style="background-color:blue; width:10px; height:20px"></div>
//取得样式
var myDiv=document.getElementById("myDiv"); //首先取得元素的引用
alert(myDiv.style.width); //"10px"//修改样式
myDiv.style.width="20px";

 

(1)style对象的属性和方法

style对象是CSSStyleDeclaration的实例,类似于一个数组

cssText

length

getPropertyValue()

item() []

removeProperty()

setProperty(propertyName,value,priority) //设置属性,并设置!important

//cssText在元素有多项变化时使用
myDiv.style.cssText="width:20px; height:30px; background-color:red";

 

//getPropertyValue()通过属性名取得属性值
var property,i,len,value
for(i=0,len=myDiv.style.length;i<len;i++){property=myDiv.style[i];value=myDiv.style.getPropertyValue(property);alert(property+":"+value);
}

 

//移除属性
myDiv.style.removeProperty("border");

 

(2).计算的样式(所有样式信息)

document.defaultView.getComputedStyle(元素,伪元素的字符串)

var computedStyle=document.defaultView.getComputedStyle(myDiv,null);
alert(computedStyle.width); //

IE中类似的属性:style.currentStyle

注:所有计算的样式都是只读的,不能修改计算后样式对象中的CSS属性

2.操作样式表

CSSStyleSheet类型表示样式表,继承自StyleSheet,包括外部样式表和内部样式表。为只读

测试是否支持DOM2级样式表:

var supportDOM2StyleSheets=document.implementation.hasFeature(“StyleSheets”,"2.0”);

 

document.styleSheets表示文档中所有样式表。也可以直接通过<link><style>元素取得CSSStyleSheet对象,用sheet或styleSheet属性

//取得样式表对象
function getStyleSheet(element){return element.sheet||element.styleSheet;
}//取得第一个<link>元素引入的样式表
var link =document.getElementsByTagName("link")[0];
var sheet=getStylesheet(link);

 

(1)访问和修改CSS样式表

CSSRule对象表示样式表中的每一条规则,是一个基类型。CSSStyleRule类型继承自CSSRule,表示样式信息。常用属性:

cssText:与style.cssText属性类似,前者包含选择符文本和花括号,后者只包含样式信息。前者为只读,后者可重写

selectorText

style

影响符合该规则的所有元素:

div.box{background-color:blue;width:100px;height:200px;
}
//假设这条规则位于页面中第一个样式表中,且只有这一条样式规则var sheet=document.styleSheets[0]; //取得第一个样式表的引用
var rules=sheet.cssRules||sheet.rules; //取得表中的每一条规则
var rule=reles[0]; //取得第一条规则
alert(rule.style.width); //"100px"rule.style.backgroundColor="red" //修改样式信息

 

(2)向样式表中添加新规则

insertRule(规则文本,插入规则的索引) IE:addRule(“body”,"background-color:silver“,0)

夸浏览器向样式表插入规则:

function insertRule(sheet,selecorText,cssText,position){if(sheet.insertRule){sheet.insertRule(selectorText+"{"+cssText+"}",position);}else if(sheet.addRule){sheet.addRule(selectorText,cssText,position);}
}insertRule(document.styleSheet[0],"body","background-color:red",0);

 

(3)删除

deleteRule() removeRule()

夸浏览器:

function deleteRule(sheet,index){if(sheet.deleteRule){sheet.deleteRule(index);}else if(sheet.removeRule){sheet.removeRule(index);}
}deleteRule(document.styleSheets[0],0); //删除第一条规则

 

3.元素大小

(1)偏移量

偏移量:元素在屏幕上占用的所有可见的空间

offsetHeight

offsetWidth

offsetLeft

offsetTop

offsetParent

计算绝对位置:

//左偏移量
function getElementLeft(element){var actualLeft=element.offsetLeft;var current=element.offsetParent;while(current!==null){actualLeft+=current.offsetLeft;current=current.offsetParent;}return actualLeft;
}//上偏移量
function getElementTop(Top){var actualTop=element.offsetTop;var current=element.offsetParent;while(current!==null){actualTop+=current.offsetTop;current=current.offsetParent;}return actualTop;
}

 

一般来说,通过getElementLeft()和getElementTop()会返回与offsetLeft和offsetTop相同的值

(2)客户区大小

客户区大小:元素内容及其内边距所占据的空间大小

clientWidth

clientHeight

多用于确定浏览器视口大小:

function getViewport(){if(document.compatMode=="BackCompat"){return {width:document.body.clientWidth,width:document.body.clientHeight};}else{return {width:document.documentElement.clientWidth,height:document.documentElement.clientHeight};}
}

 

(3)滚动大小

滚动大小:包含滚动内容的元素的大小

scrollHeight:元素内容的总高度(实际大小)

scrollWidth:元素内容的总宽度

scrollLeft:被隐藏在内容区域左侧的像素数

scrollTop:被隐藏在内容区上边的像素数

夸浏览器取得滚动文档的总高度:

var docHeight=Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);
var docWidth=Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);

 

设置元素的滚动位置:

function scrollToTop(element){if(element.scrollTop!=0){element.scrollTop=0;}
}

 

(4)确定元素的大小

getBoundingClientRect()方法,有4个属性:left,top,right,bottom.给出了元素在页面中相对视口的位置

//兼容性问题再看

三.遍历

1.NodeIterator

document.createNodeIterator()

4个参数:

root:搜索起点

whatToShow:NodeFilter对象

filter:可以自定义NodeFilter对象

entityReferenceExpansion:布尔值,表示是否要扩展实体引用。??

<div id="div1"><p><b>hello</b>world</p><ul><li>list1</li><li>list2</li><li>list3</li></ul>
</div>//遍历div元素中所有元素
var div=document.getElementById("div1");
var iterator=document.createNodeIterator(div,NodeFilter.SHOW_ELEMENT,null,false);
var node=iterator.nextNode();
while(node!=null){alert(node.tagName);node=iterator.nextNode();
}//只遍历li元素
var div=document.getElementById("div1");
var filter=function(node){return node.tagName.toLowerCase()=="li"?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP;
};
var iterator=document.createNodeIterator(div,NodeFilter.SHOW_ELEMENT,filter,false);
var node=iterator.nextNode();
while(node!=null){alert(node.tagName);node=iterator.nextNode();
}

 

(2)TreeWalker

比NodeIterator更高级。NodeIterator值允许以一个节点的步幅前后移动,而TreeWalker还支持DOM节后的各个方向上移动,包括父节点,同辈节点和子节点等方向。

//例如上边的只遍历li元素
var div=document.getElementById("div1");
var walker=document.createTreeWalker(div,NodeFilter.SHOW_ELEMENT,null,false);walker.firstChild(); //转到<p>
walker.nextSibling(); //转到<ul>var node=walker.firstChild(); //转到第一个<li>
while(node=!null){alert(node.tagName);node=walker.nextSibling();
}

 

四.范围

范围是选择DOM结构中特定的部分,然后执行相应操作的一种手段

使用范围选区可以在删除文档中某些部分的同时,保持文档结构的格式良好,过着复制文档中的相应部分。

1.DOM中的范围

2.IE8及更早版本中的范围

IE8及更早版本不支持“DOM2级遍历和范围”模块,但它提供了一个专有的文本范围对象,可以用来完成简单的基于文本的范围操作。IE9完全支持DOM遍历。

转载于:https://www.cnblogs.com/liuzhongyi1992/p/3495900.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目上线最后工作——布署环境

当项目开发完成后&#xff0c;需要将项目代码放到服务器上&#xff0c;这个服务器拥有固定的IP&#xff0c;再通过域名绑定&#xff0c;就可以供其它人浏览&#xff0c;对于python web开发&#xff0c;可以使用wsgi、apache服务器&#xff0c;此处以wsgi为例进行布署服务器首先…

spacy 报错 gold.pyx in spacy.gold.GoldParse.__init__() 解决方案

在使用 spacy 进行 NLP 时出现以下错误&#xff1a; --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-164-8ef00790b0bb> in <module&g…

Python基础(四)--字典与集合

Python基础&#xff08;四&#xff09;--字典与集合 1 字典 1.1 什么是字典 字典提供的是一种映射存储的方式。字典分为两个部分&#xff0c;一个是键&#xff08;key&#xff09;&#xff0c;一个是key所关联的值&#xff08;value&#xff09;。&#xff0c;一个键关联&am…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy)

文章目录1. 导入包2. 数据预览2. 特征组合3. 建模4. 训练5. 预测练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;RNN/GRU/LSTM&#xff09; [Kaggle] Spam/Ham Email Classifi…

电商网站(Django框架)—— 大纲内容与基本功能分析

1. 项目架构 2. 数据库表结构 3. 数据库读写分离 4. Django读写分离配置 新建utils/db_router.py 课后阅读资料 http://python.usyiyi.cn/documents/django_182/topics/db/multi-db.html 5. 用户认证模型 注意&#xff1a; AUTH_USER_MODEL配置参数要在第一次迁移数据库之…

实现一个无法被继承的C++类

原文地址&#xff1a;http://blog.csdn.net/lazy_tiger/article/details/2224899 一个类不能被继承&#xff0c;也就是说它的子类不能构造父类&#xff0c;这样子类就没有办法实例化整个子类从而实现子类无法继承父类。我们可以将一个类的构造函数声明为私有&#xff0c;使得这…

Python基础(五)--函数

目录 Python基础&#xff08;五&#xff09;--函数 1 函数的作用 1.1 函数定义与调用 1.2 函数的作用 1.3 空语句 2 参数与返回值 2.1 函数的参数 2.2 函数的返回值 2.3 返回多个值 3 参数的默认值 3.1 可选参数 3.2 参数的默认值 4 位置参数与关键字参数 4.1 关键…

LeetCode 1024. 视频拼接(动态规划/贪心)

文章目录1. 题目2. 解题2.1 动态规划2.2 贪心1. 题目 你将会获得一系列视频片段&#xff0c;这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠&#xff0c;也可能长度不一。 视频片段 clips[i] 都用区间进行表示&#xff1a;开始于 clips[i][0] 并于 clip…

电商网站(Django框架)—— 思维导图

1.用户模块&#xff1a;注册、登录、激活、退出、个人中心、地址 2.商品模块&#xff1a;首页、详情、列表、搜索 3.购物车&#xff1a; 增加、删除、修改、查询 4. 订单模块&#xff1a;确认订单页面、提交订单&#xff08;下单&#xff09;、请求支付、查询支付结果、评论 5.…

于是按照贴吧某同学的指教,把imageViewer里那个愚蠢的语句改了

于是开心地升级到了V1.1版本 等我先消化下知识再来更新。 关键在于面板的setPreferredSize(Dimension d)方法和框架的pack()方法。 大概就是说&#xff0c;用了布局管理器的话&#xff0c;管理器会根据preferredSize来安排控件大小&#xff0c;用setSize的话不一定会起作用&am…

Python基础(六)--类与对象

目录 Python基础&#xff08;六&#xff09;--类与对象 1 类与对象的基本概念 1.1 什么是对象 1.2 什么是类 1.3 类与对象的关系 2 定义与初始化 2.1 类的定义 2.2 对象的初始化 2.3 动态增加属性方法 3 类成员 3.1 类属性与实例属性 3.2 类方法与实例方法 3.3 静态…

HTTP和HTTPS的请求和响应

HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff1a;是一种发布和接收 HTML页面的方法。 HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;简单讲是HTTP的安全版&#xff0c;在HTTP下加入…

LeetCode 794. 有效的井字游戏(分类讨论)

文章目录1. 题目2. 解题1. 题目 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中&#xff0c;玩家有可能将字符放置成游戏板所显示的状态时&#xff0c;才返回 true。 该游戏板是一个 3 x 3 数组&#xff0c;由字符 " "&#xff0c;"X&quo…

Requests: 让 HTTP 服务人类

Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 Requests的文档非常完备&#xff0c;中文文档也相当不错。Requests能完全满足当前…

Python基础(七)--模块和包

目录 Python基础&#xff08;七&#xff09;--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 math 3.2 random 3.3 time 3.4 datetime 3.5 sys Python基础&#xff08;七&am…

LeetCode 909. 蛇梯棋(BFS)

文章目录1. 题目2. 解题1. 题目 N x N 的棋盘 board 上&#xff0c;按从 1 到 N*N 的数字给方格编号&#xff0c;编号 从左下角开始&#xff0c;每一行交替方向。 例如&#xff0c;一块 6 x 6 大小的棋盘&#xff0c;编号如下&#xff1a; r 行 c 列的棋盘&#xff0c;按前…

爬虫必须学会的正则表达式

为什么要学正则表达式 实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在昨天的案例里实际上…

fedora20 安装ror

rvm安装 $ curl -L get.rvm.io | bash -s stable $ source ~/.bashrc $ source ~/.bash_profile $ rvm install 2.0.0 测试是否正确 $ ruby -v ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin13.0.0]$ gem -v 2.1.6$ gem source -r https://rubygems.org/ $ gem s…

Python基础(八)--迭代,生成器,装饰器与元类

目录 Python基础&#xff08;八&#xff09;--迭代&#xff0c;生成器&#xff0c;装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2.3 生成器函数 3 装饰器 3.1 闭包 3.2 什么是装饰器 …

XPath和lxml类库

XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 什么是XML XML 指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09;XML 是一种标记语言&#xff0c;很类似 HTMLXML 的设计宗旨是传输数据&#xf…