• 笔记《javascript高级程序设计》 第12章 DOM2和DOM3


    DOM2 级核心:在 1 级基础上构建,为节点添加更多方法和属性
    DOM2 级视图:为文档定义了基于样式信息的不同视图
    DOM2 级事件:说明了如何使用事件和DOM文档交互
    DOM2 级样式:如何以编程方式来访问和改变CSS样式信息
    DOM2 级遍历和范围:引入了遍历DOM文档和选择其特定部分的新接口
    DOM2 级HTML:添加了更多属性、方法和新接口
     
    12.1 DOM变化
    DOM2 级和3级的目的在于扩展DOM API,满足操作XML的所有需求,同时提供更好的错误处理及特性检测能力。
     
     
    12.1.2 其它方面的变化
    1.DocumentType 类型变化
    新增3个属性:publicID、systemID 表示的是文档类型声明中的两个信息段,在DOM1中无法访问
    internalSubset   , 用于访问包含在文档类型声明中的额外定义
     
    2.Document 类型的变化
    importNode()
    用途:从一个文档中取得一个节点,然后将其导入另一个文档。   如果调用appendChild()在不同文档中传入节点会出错
    接受两个参数:要复制的节点和一个表示是否复制子节点的布尔值。返回的结果是原来节点的副本,但能够在文档中使用
     
     
    3.Node类型的变化
    isSupported()
    isSameNode()
    isEqualNode()
     
    4.框架的变化
     
    12.2 样式
    12.2.1   访问元素的样式
    style 可以获取和设置html元素style特性指定的所有样式信息,但不包含与外部样式表或嵌入样式表经层叠而来的样式。
    对于使用短划线的css属性名,必须将其转换为驼峰大小写形式
     
    1.DOM样式属性和方法
    在提供元素 的style特性值时,也可修改样式
     
    cssText:访问style特性中的css代码(写入模式,以前通过style设定的样式信息全将丢失)
    length:应用给元素的css属性的数量
    parentRule:表示CSS信息的CSSRule对象
    getPropertyCSSValue(propertyName):返回包含给定属性值的CSSValue对象
    getPropertyPriority(propertyName):如果给定的属性使用了!important设置,则返回 “important”,否则,返回空
    gePropertyValue(propertyName):返回给定属性的字符串值
    item(index):返回给定位置的css属性的名称
    removeProperty(propertyName):从样式中删除给定属性
    setProperty(propertyName,value,priority):将给定属性设置为相应的值,并加上优先权标志( !important  或   一个空字符串)
     
     
    2.计算的样式
     
    • document.defaultView.getComputedStyle(mydiv,:after / null) —— 此方法在IE9 以下浏览器中无法生效
    接受两个参数,1 要取得计算样式的元素   ,  2 一个伪元素字符串 :after,:before,或者为null
     
    • 在IE8及以下中可使用  .currentStyle  属性,来获取当前元素的样式
     
    兼容性最好求取元素所有样式列表的方法
     var computedStyle = window.getComputedStyle?document.defaultView.getComputedStyle(myDiv, null):myDiv.currentStyle;
     
    以上方法计算出的样式都是只读,不能修改。
    包含属性浏览器内部所有样式信息,任何具有默认值的css属性都会表现在计算后的样式中。部分为浏览器为  visibility,部分为 visible  ,有的则为  inherit 
     
     
    12.2.2  操作样式表
    styleSheets  遍历 styleSheets 循环可以获取当前页面通过 link 包含的样式表和 style 元素定义的所有样式表。以下属性可以对样式表进行获取或者设置操作:
     
    disabled:表示样式是否被禁用的布尔值。可读 / 写,true表示禁用
    href:如果样式表通过 link 包含,则返回样式表的URL,否则为null
     
     
     
     
    1. css规则。 cssStyleRule 对象包含下列属性
     
    offset偏移量
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<style>
    			*{ margin: 0; padding: 0; }
    			.waidiv{ 600px; height: 700px; border: 6px #C0C0C0 solid;}
    			.py{ 200px; height: 150px; background: #444; padding: 4px; margin: 10px; border: 5px #FF0000 solid;}
    			
    			
    			.par1{ padding: 40px;}
    			.par2{ padding: 30px;}
    		</style>
    	</head>
    	<body>
    		<div class="par2">
    			<div class="par1">
    				<div class="waidiv">
    					<div id="py" class="py">偏移量测试</div>
    				</div>
    			</div>
    		</div>
    		<input type="button" value="元素宽" onclick="getEleWidth()"/>
    		<input type="button" value="元素高" onclick="getEleHeight()"/>
    		<input type="button" value="getOffsetLeft" onclick="getEleoffLeft()"/>
    		<input type="button" value="getOffsetTop" onclick="getEleoffTop()"/>
    		<input type="button" value="元素距浏览器顶部距离" onclick="getActualTop(document.getElementById('py'))"/>
    		<input type="button" value="元素距浏览器左距离" onclick="getActualLeft(document.getElementById('py'))"/>
    		
    		<script>
    			var py = document.getElementById("py");
    			function getEleWidth(){
    				alert(py.offsetWidth);
    			}
    			function getEleHeight(){
    				alert(py.offsetHeight);
    			}
    			function getEleoffLeft(){
    				alert(py.offsetLeft);
    			}
    			function getEleoffTop(){
    				alert(py.offsetTop);
    			}
    			function getActualLeft(element){
    				var actuaLeft = element.offsetLeft;
    				var current = element.offsetParent;
    				while( current !== null){
    					actuaLeft += current.offsetLeft;
    					current = current.offsetParent;
    				};
    				alert(actuaLeft);
    			}
    			
    			function getActualTop(element){
    				var actuaTop = element.offsetTop;
    				var current = element.offsetParent;
    				
    				while(current !== null){
    					actuaTop += current.offsetTop;
    					current = current.offsetParent;
    				};
    				
    				alert(actuaTop);
    			}
    			
    			console.log()
    		</script>
    	</body>
    </html>
    

    混杂模式、标准模式下,scrollWidth、clientWidth、document.documentElement.scrollWidth、document.body.scrollWidth

    对于混杂模式下IE 需要用 document.body代替document.documentElement

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<style>
    			.testscroll{  2000px; height: 1500px; background: #C0C0C0;}
    		</style>
    	</head>
    	<body>
    		<div class="testscroll" id="adiv"></div>
    		
    		<script>
    			var adiv = document.getElementById("adiv");
    			console.log("scrollWidth:"+document.documentElement.scrollWidth);
    			console.log("scrollHeight:"+document.documentElement.scrollHeight);
    			console.log("clientWidth:"+document.documentElement.clientWidth);
    			console.log("clientHeight:"+document.documentElement.clientHeight);
    			
    			function getWin(){
    				var mode = document.compatMode ;
    				// 是否处于标准模式
    				if(mode == "CSS1Compat"){
    					// 疑问:是不是现在浏览器版本变高,然后都同步了?
    					// 我测试过程中,谷歌、火狐、IE里clientWidth取到的都是视口宽度,书上说的谷歌scrollWidth为视口宽度
    					alert("可视区域宽度为:"+document.documentElement.clientWidth);
    					alert("可视区域高度为:"+document.documentElement.clientHeight);
    					
    					// 由于浏览器之间存在差异,以scrollWidth和clientWidth中求大值最靠谱
    					var docWin = Math.max(document.documentElement.scrollWidth,document.documentElement.clientWidth);
    					var docHei = Math.max(document.documentElement.scrollHeight,document.documentElement.clientHeight);
    					alert("标准模式下文档的宽度:"+docWin);
    					alert("标准模式下文档的宽度:"+docHei);
    					
    				}
    				// 是否处于混杂模式
    				else if(mode == "BackCompat"){
    					var docWin = Math.max(document.body.scrollWidth,document.body.clientWidth);
    					var docHei = Math.max(document.body.scrollHeight,document.body.clientHeight);
    					alert("混杂模式下文档的宽度:"+docWin);
    					alert("混杂模式下文档的宽度:"+docHei);
    				}
    			}
    			
    			window.onload = function(){
    				getWin();
    			}
    		</script>
    	</body>
    </html>
    

      

  • 相关阅读:
    fastJson
    关于mybatis “org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)” 错误的问题。
    JVM——自定义类加载器
    NumberFormat数字格式化
    Java BigDecimal详解
    NumberUtils、ArrayUtils和RandomUtils工具类用法
    itext 生成 PDF(二)
    C语言中的可变参数列表
    归并排序--c语言实现
    机器学习实战学习笔记 一 k-近邻算法
  • 原文地址:https://www.cnblogs.com/fighxp/p/6269363.html
Copyright © 2020-2023  润新知