Javascript之DOM

节点分类 node

  元素节点  文本节点 属性节点

获取元素节点对象的方式

  1. var eleNode = document.getElementById('idname');

  2. var olist = document.getElementsByTagName('li'); 获取所有的li标签,是一个节点对象的集合,有点像数组,但不是数组。

  3. var items = documet.getElementsByClassName('item'); 获取的依然是节点对象集合

获取和设置元素节点对象属性的方式

  1. var classname = obj.getAttribute('class');

  2. obj.setAttribute('class', 'header');

节点对象的三个属性

  nodeName nodeValue nodeType

  <div id="box">我是一个文本<!--我是注释--></div>

  // 元素节点
        var odiv = document.getElementById('box');
        console.log(odiv.nodeName + " | " + odiv.nodeValue + " | " + odiv.nodeType);

  // 属性节点
        var attrnode = odiv.attributes[0];
        console.log(attrnode.nodeName + " | " + attrnode.nodeValue + " | " + attrnode.nodeType);

        // 文本节点
        var textnode = odiv.childNodes[0];
        console.log(textnode.nodeName + " | " + textnode.nodeValue + " | " + textnode.nodeType);

        // 注释节点
        var comment = odiv.childNodes[1];
        console.log(comment.nodeName + " | " + comment.nodeValue + " | " + comment.nodeType);

节点对象的其他常用属性

   var oFather = document.getElementById('father');

   console.log(oFather.childNodes[0]);
        console.log(oFather.firstChild);
        console.log(oFather.childNodes[oFather.childNodes.length - 1]);
        console.log(oFather.lastChild);
        console.log(oFather.parentNode.parentNode);
        console.log(oFather.nextSibling);
        console.log(oFather.previousSibling);

封装获取相应节点对象的方法

    <div class = "previous">我是上一个兄弟</div>
    <div id = "father">
        <p>我是文本1</p>
        <p>我是文本2</p>
    </div>
    <!-- 我是注释 -->
    <div class = "next">我是下一个兄弟</div>

    <script type="text/javascript">
        var ofather = document.getElementById("father");
        function getChilds(father_obj){
            var father_childs = father_obj.childNodes;
            var arr = [];
            for(var i = 0; i < father_childs.length; i++){
                if(father_childs[i].nodeType===1){
                    arr.push(father_childs[i]);
                }
            }
            return arr;
        }
        var childs = getChilds(ofather);
        console.log(childs[0]);

        function getNext(n){
            var x = n.nextSibling;
            while(x && x.nodeType != 1){
                x = x.nextSibling;
            }
            return x;        }        

  console.log(getNext(ofather));

元素节点对象的增删改查操作

   <div id="father">
          <p id="text">我是一个文本</p>
     </div>

        // 动态的操作节点
        //     1. 创建节点 createElement()
        //     2. 插入节点 appendChild()
        //                insertBefore(newNode, oldNode)
        //     3. 删除节点 removeChild()
        //     4. 替换节点 replaceChild(newNode, oldNode)
        //     5. 创建文本节点 createTextNode()

        var oDiv = document.getElementById('father');
        var oActive = document.getElementById("text");

        var newNode = document.createElement("p");
        var newNode1 = document.createElement("a");
        var newNode2 = document.createElement("p");
        var newNode3 = document.createElement("span");
        // var textNode = document.createTextNode("百度");
        // newNode.appendChild(textNode);
        newNode.innerHTML = "aaaaaaa";   //给元素节点添加文本的常用方法
        newNode.setAttribute("class","box");
        oDiv.appendChild(newNode);

        newNode1.innerHTML = "百度一下";
        newNode1.setAttribute("href", "https://www.baidu.com");
        oDiv.replaceChild(newNode1,oActive);

        newNode2.innerHTML = "<a href='#'>hello world</a>";
        oDiv.insertBefore(newNode2, newNode1);

        newNode3.innerHTML = "文本2";
        oDiv.appendChild(newNode3);

        oDiv.removeChild(newNode3);

        newNode, newNode1, newNode2, newNode3 = null;

事件

  onclick事件  鼠标点击事件

      <div id="box"></div>

      <script type="text/javascript">
         var oDiv = document.getElementById("box");
         var flag = true;
         oDiv.onclick = function(){
            if(flag){
                oDiv.style.backgroundColor = "blue";
                flag = false;
             }else{
                oDiv.style.backgroundColor = "red";
                flag = true;
             }
         };
  onmouseover 鼠标悬停事件

  onmouseout  鼠标移开事件

  onfocus和onblur事件  鼠标聚焦和鼠标失焦事件

      <form action="">
           <p class="name">
             <label for="username">用户名:</label>
             <input type="text" name="user" id="username">
           </p>
           <p class="pwd">
             <label for="pwd">密码:</label>
             <input type="password" name="wpd" id="pwd">
           </p>
          <input type="submit" name="">
          </form>
          <script type="text/javascript">
            var userName = document.getElementById('username');
            var newNode = document.createElement('span');
            userName.onfocus = function(){
                 newNode.innerHTML = '请输入用户名';
                 newNode.setAttribute('class', 'text')
                 userName.parentNode.appendChild(newNode);
            userName.onblur = function(){
                   newNode.innerHTML = '请输入正确的用户名';
                   newNode.setAttribute('class', 'text')
                   userName.parentNode.appendChild(newNode);
          }
      </script>

  onselect内容选中事件

  onchange 内容改变事件

  oninput 内容实时改变事件

    <textarea cols="30" rows="10">请写入个人简介,字数不少于200字</textarea>
    <input type="text" name="" value="mjj">
    <script type="text/javascript">
      var textArea = document.getElementsByTagName('textarea')[0];
      var inputObj = document.getElementsByTagName('input')[0];
      textArea.onselect = function(){
        console.log('内容被选中');
      }
      inputObj.onchange = function(){
        console.log('内容被改变了');
      }
      inputObj.oninput = function(){
        console.log('内容被实时改变了');
        console.log(this.value);
      }

  onload 网页窗口加载事件

    window.onload = function(){

    }

 

posted @ 2020-04-29 14:21  Jet-chen  阅读(145)  评论(0编辑  收藏  举报