昔日

JS笔记11(DOM对象深入)

ohlinge

0x01 DOM基础

        文档对象模型DOM(Document Object Model)定义访问和处理HTML文档的标准方法。DOM 将HTML文档呈现为带有元素、属性和文本的树结构(节点树)

HTML文档可以说由节点构成的集合,DOM节点有:

1. 元素节点:上图中<html>、<body>、<p>等都是元素节点,即标签。

2. 文本节点:向用户展示的内容,如<li>...</li>中的JavaScript、DOM、CSS等文本。

3. 属性节点:元素属性,如<a>标签的链接属性href="https://www.imooc.com"。

节点属性:

遍历节点树:

以上图ul为例,它的父级节点body,它的子节点3个li,它的兄弟结点h2、P。

DOM操作:

注意:前两个是document方法。


0x02 三种获取方法

        document.getElementById("");

        document.getElementsByTagName("");

        document.getElementsByName("");

ID相当于身份证,具有唯一性;

Name是名字,可以重复;

TagName可以看做是类别;

    注意到后面两个是Elements,即获取到的是一组数,是一个数组;同样也具有length属性。

eg.  js实现多选框全选操作,代码如下:

<!DOCTYPE HTML>

<html>

    <head>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

        <title>无标题文档</title>

    </head>

    

    <body>

        <form>

          请选择你爱好:<br>

          <input type="checkbox" name="hobby" id="hobby1">  音乐

          <input type="checkbox" name="hobby" id="hobby2">  登山

          <input type="checkbox" name="hobby" id="hobby3">  游泳

          <input type="checkbox" name="hobby" id="hobby4">  阅读

          <input type="checkbox" name="hobby" id="hobby5">  打球

          <input type="checkbox" name="hobby" id="hobby6">  跑步 <br>

          <input type="button" value = "全选" onclick = "checkall();">

          <input type="button" value = "全不选" onclick = "clearall();">

          <p>请输入您要选择爱好的序号,序号为1-6:</p>

          <input id="wb" name="wb" type="text" >

          <input name="ok" type="button" value="确定" onclick = "checkone();">

        </form>

        <script type="text/javascript">

        function checkall(){

            var hobby = document.getElementsByTagName("input");

            for(var i=0;i<hobby.length;i++){

                hobby[i].checked=true;

                

            }

          // 任务1

           

        }

        function clearall(){

            var hobby = document.getElementsByName("hobby");

            //alert(hobby.length);

            for(var i=0;i<hobby.length;i++){

                hobby[i].checked=false;

            }

         // 任务2    

            

        }

        

        function checkone(){

            clearall();

            var hobby = document.getElementsByName("hobby");

            var j=document.getElementById("wb").value;

            for(var i=0;i<j.length;i++){

                if(j.charAt(i)>6 || j.charAt(i)<1){

                    alert("越界,请重新输入!");

                    document.getElementById("wb").value="";

                }

            }


            for(var n=0;n<j.length;n++){

                   

                 hobby[(j.charAt(n))-1].checked=true; 

              }

        }

        

        </script>

    </body>

</html>


0x03 get/setAttribute()方法

        通过元素节点的属性名称获取属性的值。

语法:

        elementNode.getAttribute(name) 

说明:

1. elementNode:使用getElementById()、getElementsByTagName()等方法,获取到的元素节点。

2. name:要想查询的元素节点的属性名字

        setAttribute() 方法增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。

语法:

elementNode.setAttribute(name,value) 

说明:

1.name: 要设置的属性名。

2.value: 要设置的属性值。

注意:

1.把指定的属性设置为指定的值。如果不存在具有指定名称的属性,该方法将创建一个新属性。

2.类似于getAttribute()方法,setAttribute()方法只能通过元素节点对象调用的函数。


0x04 节点属性

        在文档对象模型 (DOM) 中,每个节点都是一个对象。DOM 节点有三个重要的属性 :

1. nodeName : 节点的名称

2. nodeValue :节点的值

3. nodeType :节点的类型

一、nodeName 属性: 节点的名称,是只读的。

1. 元素节点的 nodeName 与标签名相同
2. 属性节点的 nodeName 是属性的名称
3. 文本节点的 nodeName 永远是 #text
4. 文档节点的 nodeName 永远是 #document

二、nodeValue 属性:节点的值

1. 元素节点的 nodeValue 是 undefined 或 null
2. 文本节点的 nodeValue 是文本自身
3. 属性节点的 nodeValue 是属性的值

三、nodeType 属性: 节点的类型,是只读的。以下常用的几种结点类型:

元素类型    节点类型
  元素          1
  属性          2
  文本          3
  注释          8
  文档          9


0x05 关于兄弟/子/父节点

        对元素节点的访问,语法:

        elementNode.childNodes   //包含firstChild,lastChild

        elementNode.parentNodes   //可以连续向上求父节点

        nodeObject.nextSibling   //访问兄弟节点,下一个

        nodeObject.previousSibling   //访问兄弟节点,上一个


0x06 插入子节点appendChild()

eg. 

<ul id="test">

  <li>JavaScript</li>

  <li>HTML</li>

</ul> 

<script type="text/javascript">

  var otest = document.getElementById("test");  

  var newnode = document.createElement("li");

  newnode.innerHTML = "PHP";

  otest.appendChild(newnode);

</script> 

 

插入节点 insertBefore()

        nodeObject.insertBefore(newnode,node);    //node指此节点前插入节点


删除节点removeChild()

        nodeObject.removeChild(node)

eg.

<body>

<div id="content">

  <h1>html</h1>

  <h1>php</h1>

  <h1>javascript</h1>

  <h1>jquery</h1>

  <h1>java</h1>

</div>

<script type="text/javascript">

function clearText() {

  var content=document.getElementById("content");

  // 在此完成该函数

  (for(var i=0;i<content.childNodes.length;i++){

    var x = content.removeChild(content.childNodes[i]);

  }

}

</script>

<button onclick="clearText()">清除节点内容</button>


替换元素节点replaceChild()

        node.replaceChild(newnode,oldnew);

创建元素节点createElement

    document.createElement(tagName);

注意:要与appendChild() 或 insertBefore()方法联合使用,将元素显示在页面中。

创建文本节点createTextNode

        document.createTextNode(data)

eg.

<script type="text/javascript">

    var element = document.createElement("p");

    element.className="message";

    var textNode = document.createTextNode("I love JavaScript!");

    element.appendChild(textNode);

    document.body.appendChild(element);

</script> 


0x07 浏览器窗口可视区域大小

        获得浏览器窗口的尺寸(浏览器的视口,不包括工具栏和滚动条)的方法:

一、对于IE9+、Chrome、Firefox、Opera 以及 Safari:

•  window.innerHeight - 浏览器窗口的内部高度

•  window.innerWidth - 浏览器窗口的内部宽度

二、对于 Internet Explorer 8、7、6、5:

•  document.documentElement.clientHeight表示HTML文档所在窗口的当前高度。

•  document.documentElement.clientWidth表示HTML文档所在窗口的当前宽度。

或者

Document对象的body属性对应HTML文档的<body>标签

•  document.body.clientHeight

•  document.body.clientWidth

在不同浏览器都实用的 JavaScript 方案:

var w= document.documentElement.clientWidth       || document.body.clientWidth; 

var h= document.documentElement.clientHeight       || document.body.clientHeight;


0x08 网页尺寸scrollHeight

scrollHeight和scrollWidth,获取网页内容高度和宽度。

一、针对IE、Opera:

scrollHeight 是网页内容实际高度,可以小于 clientHeight。

二、针对NS、FF:

scrollHeight 是网页内容高度,不过最小值是 clientHeight。也就是说网页内容实际高度小于 clientHeight 时,scrollHeight 返回 clientHeight 。

三、浏览器兼容性

var w=document.documentElement.scrollWidth    || document.body.scrollWidth;

var h=document.documentElement.scrollHeight    || document.body.scrollHeight;

注意:区分大小写

scrollHeight和scrollWidth还可获取Dom元素中内容实际占用的高度和宽度。


0x09 网页尺寸offsetHeight

offsetHeight和offsetWidth,获取网页内容高度和宽度(包括滚动条等边线,会随窗口的显示大小改变)。

一、值

offsetHeight = clientHeight + 滚动条 + 边框。

二、浏览器兼容性

var w= document.documentElement.offsetWidth     || document.body.offsetWidth; 

var h= document.documentElement.offsetHeight     || document.body.offsetHeight;






评论

热度(1)