zoukankan      html  css  js  c++  java
  • dom2和dom3

    第十二章 DOM2和DOM3

    一.DOM变化

            1.针对XML命名空间的变化

            2.其他方面的变化   

    二.样式 

          1.访问元素的样式

                .style
                1)DOM样式属性方法
                    cssText:访问style特性中的CSS代码
                    length:应用给元素的CSS属性数量
                    parentRule:表示CSSRule对象
                    getPropertyCSSValue(propertyName):返回包含给定属性值的CSSValue对象
                    getPropertyPriority(propertyName):如果给定的属性使用了!important设置,则返回"important";否则,返回空字符串
                    getPropertyVlue(propertyName):返回给定属性的字符串值
                    item(index):返回给定位置的CSS属性的名称
                    removeProperty(propertyName):从样式中删除给定属性
                    setProperty(propertyName,value,priority):将给定属性设置哦为相应的值,并加上有限标志(“important”或者一个空字符串)
                    -cssText:
                        myDiv.style.cssText="25px;height:100px;background-color:green";
                        alert(myDiv.style.cssText);
                        //为元素应用多项变化的快捷方式
                    -length:
                        for( var i=0,len=myDiv.style.length;i<len;i++)
                            {
                                  alert(myDiv.style[i]);//或者myDiv.style.item(i)  
                             }
                    2)计算的样式
                        

          2.操作样式表

              CSSStyleSheet类型表示的是样式表
                1)css规则
                    CSSStyleRule对象:
                    div.box{
                     background-color:blue;
                    100px;
                    height:200px;
                   }
                    var sheet =docuemnt.styleSheets[0];
                    var rules=sheet.cssRules || sheet.rules;//取得规则列表
                    var rules = rules[0];//取得第一条规则
                    alert(rule.selectorText);//"div.box"
                    alert(rule.style.cssText);//完整的CSS代码
                    alert(rule.style.backgroundColor);//"blue"
                    alert(rule.style.width);//"100px"
                   alert(rule.style.height);//"200px"
                2)创建规则
                    要向现有样式表中添加新规则,需要使用inserRule()方法:两个参数:规则文本和在哪里插入规则的索引
                    sheet.insertRule("body{background-color:silver}",0);//DOM方法
               3)删除规则
                    deleteRule(); 一个参数:要删除的位置
                    sheet.deleteRule(0);//DOM方法
                    sheet.removeRule(0);//仅对IE有效

          3.元素大小

                1)偏移量:
                    offsetHeight、 offsetTop、 offsetWidth、 offsetlLeft。
                2)客户区大小:元素内容及其内边距所占空间的大小
                    clientWidth、 clientHeight。
                3)滚动大小
                  
            4).确定元素大小
                
    1. function getElementLeft(element){
    2. var actualLeft = element.offsetLeft;
    3. var current = element.offsetParent;
    4. while (current !== null){
    5. actualLeft += current.offsetLeft;
    6. current = current.offsetParent;
    7. }
    8. return actualLeft;
    9. }
    10. function getElementTop(element){
    11. var actualTop = element.offsetTop;
    12. var current = element.offsetParent;
    13. while (current !== null){
    14. actualTop += current. offsetTop;
    15. current = current.offsetParent;
    16. }
    17. return actualTop;
    18. }
    19. function getBoundingClientRect(element){
    20. var scrollTop = document.documentElement.scrollTop;
    21. var scrollLeft = document.documentElement.scrollLeft;
    22. if (element.getBoundingClientRect){
    23. if (typeof arguments.callee.offset != "number"){
    24. var temp = document.createElement("div");
    25. temp.style.cssText = "position:absolute;left:0;top:0;";
    26. document.body.appendChild(temp);
    27. arguments.callee.offset = -temp.getBoundingClientRect().top - scrollTop;
    28. document.body.removeChild(temp);
    29. temp = null;
    30. }
    31. var rect = element.getBoundingClientRect();
    32. var offset = arguments.callee.offset;
    33. return {
    34. left: rect.left + offset,
    35. right: rect.right + offset,
    36. top: rect.top + offset,
    37. bottom: rect.bottom + offset
    38. };
    39. } else {
    40. var actualLeft = getElementLeft(element);
    41. var actualTop = getElementTop(element);
    42. return {
    43. left: actualLeft - scrollLeft,
    44. right: actualLeft + element.offsetWidth - scrollLeft,
    45. top: actualTop - scrollTop,
    46. bottom: actualTop + element.offsetHeight - scrollTop
    47. }
    48. }
    49. }
    50. function getDimensions(){
    51. var rect = getBoundingClientRect(document.getElementById("myDiv"));
    52. alert("left: " + rect.left + " right: " + rect.right + " top: " + rect.top + " bottom: " + rect.bottom);
    53. }
    54. </script>
    55. </head>
    56. <body style="padding: 10px; margin: 0">
    57. <div style="margin: 20px">
    58. <div style="padding: 20px">
    59. <div id="myDiv" style=" 100px; height: 50px; background-color: red; border: 1px solid black"></div>
    60. </div>
    61. </div>
    62. <input type="button" value="Get Element Dimensions" onclick="getDimensions()" />
    63. </body>
     
     

    三.遍历

                ie不支持dom遍历
    *深度优先遍历0
    检测浏览器对DOM2级遍历能力的支持情况
                var supportsTraversals=docuemnt.implementation.hasFeature("Traversal","2.0");
                var supportsNodeIterator=(typeof document.creatNodeIterator=="function");
                var supportsTreeWalker=(typeof docuemnt.creatTreeWalker=="function");

           1.NodeIterator

                document.creatNodeIterator()方法创建实例
                接受参数:
                    root:想要作为搜索起点的树中的节点
                    whatToShow:想要访问哪些节点的数字代码
                    filter:是一个NodeFilter对象,或者一个表示应该接受还是拒绝某种特定节点的函数
                    entityReferenceExpansion:布尔值,表示是否要扩展实体引用。用这个参数在HTML页面中没有用,因为其中的实体引用不能扩展。
                    eg .
                    <div id=" div1">
                     <p><b>hello</b>world!</p>
                    <ul>
                       <li>1</li>
                        <li>2</li>
                        <li>3</li> 
                   </ul>
                   </div>
                想要遍历<div>元素中的所有元素:
                var div=document.getElementById("div1");
                var iterator=docuemnt.creatNodeIterator(div,NodeFilter.SHOW_ELEMENT,null,false);
                var node=iterator.nextNode();
                while(node!=null){
                    alert(node.tagname);//输出标签名
                    node=iterator.nextNode();    
               }
    若只想要返回<li>元素:
            
    1. <head>
    2. <title>NodeIterator Example</title>
    3. <script type="text/javascript">
    4. function makeList() {
    5. var div = document.getElementById("div1");
    6. var filter = function(node){
    7. return (node.tagName.toLowerCase() == "li") ?
    8. NodeFilter.FILTER_ACCEPT :
    9. NodeFilter.FILTER_SKIP;
    10. };
    11. var iterator = document.createNodeIterator(div, NodeFilter.SHOW_ELEMENT, filter, false);
    12. //For Firefox: iterator = document.createTreeWalker(div, NodeFilter.SHOW_ELEMENT, filter, false);
    13. var output = document.getElementById("text1");
    14. var node = iterator.nextNode();
    15. while (node !== null) {
    16. output.value += node.tagName + " ";
    17. node = iterator.nextNode();
    18. }
    19. }
    20. </script>
    21. </head>
    22. <body>
    23. <p><strong>Note:</strong> The <code>NodeIterator</code> object has only been implemented in Internet Explorer 9, Chrome, Firefox (version 3.5 and higher), Opera (version 7.6 and higher) and Safari (version 1.3 and higher). It has not been implemented in Internet Explorer or Firefox (so this example won't work).</p>
    24. <div id="div1">
    25. <p><b>Hello</b> world!</p>
    26. <ul>
    27. <li>List item 1</li>
    28. <li>List item 2</li>
    29. <li>List item 3</li>
    30. </ul>
    31. </div>
    32. <textarea rows="10" cols="40" id="text1"></textarea><br />
    33. <input type="button" value="Make List" onclick="makeList()" />
    34. </body>
     

            2.TreeWalker

                    nextNode()和previousNode()
                    parentNode()遍历到当前节点的父节点
                    firstChild():遍历到当前节点的第一个子节点
                    lastChild():遍历到当前节点的最后一个子节点
                    nextSibling():遍历到当前节点的下一个同辈节点
                    previousSibling():遍历到当前节点的上一个同辈节点
                    创建TreeWalker对象
                        document.createTreeWalker()
                            四个参数:遍历起点(根节点)、要显示的节点类型、过滤器、是否扩展实体引用的布尔值。
                            
    1. <script type="text/javascript">
    2. function makeList() {
    3. var div = document.getElementById("div1");
    4. var filter = function(node){
    5. return (node.tagName.toLowerCase() == "li") ?
    6. NodeFilter.FILTER_ACCEPT :
    7. NodeFilter.FILTER_SKIP;
    8. };
    9. var walker = document.createTreeWalker(div, NodeFilter.SHOW_ELEMENT, filter, false);
    10. var output = document.getElementById("text1");
    11. var node = walker.nextNode();
    12. while (node !== null) {
    13. output.value += node.tagName + " ";
    14. node = walker.nextNode();
    15. }
    16. }
    17. </script>
     
                

    四.范围

             1.DOM中的范围

                    createRange()方法
                         selectNode()选择整个节点,包括子节点
                         selectNodeContents()只选择节点的子节点
                            用DOM范围实现复杂选择
                                setStart() setEnd():参数一个参照节点和一个偏移量
                            deleteContents()
                                <p><b>he</b><b>llo</b>world</p>
                                var p1=document.getElementById("p1");
                                    helloNode=p1.firstChlid.firstChild;
                                    worldNode=p1.lastChild;
                                    range=document.createRange();//创建范围
                                    range.setStart(helloNode,2);
                                    range.setEnd(worldNode,3);
                                    range.deleteContents();
                                    结果:
                                        <p><b>he</b>rld!</p>
                                    插入DOM范围中的内容:
                                        insertNode();
                                    清理DOM范围
                                        range.detach();//从文档中分离
                                        range=null;//解除引用

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

  • 相关阅读:
    【解决方案】流媒体协议RTSP视频平台EasyNVR远程监控系统在水利工程场景中的应用
    网络流媒体协议RTSP视频平台EasyNVR程序启动失败,端口被占用如何解决?
    视频监控联网RTSP平台EasyNVR用户管理权限与实际权限不匹配,该如何排查?
    流媒体协议RTSP视频平台EasyNVR录像回看列表删除提示日期错误,遇此问题该怎么解决?
    拉流失败,高清视频监控平台EasyNVR的RTSP摄像头被禁用怎么办?
    流媒体协议RTSP视频平台EasyNVR在windows下编译报错,该如何解决?
    如何解决RTSP协议视频平台EasyNVR智能云终端登录界面一直循环导致无法登录?
    RTSP视频平台EasyNVR如何设置防火墙允许程序运行端口的访问?
    【搭建方案】互联网电视如何通过EasyNVR视频平台传输直播视频流?
    RTSP视频平台EasyNVR录像版重启软件后服务崩溃问题排查解决
  • 原文地址:https://www.cnblogs.com/gugumiemie/p/5978452.html
Copyright © 2011-2022 走看看