dom的一些笔记

                              Dom复习

1.获取标签名,常用的有3种方式:

   <div id="box" onclick="fn()"></div>

  var div = document.getElementById("box");

  var arr1 = document.getElementsByTagName("div")

  var arr2 = document.getElementsByClassName("leiming");

2.onclick事件

  div.onclick = function () {
        //        alert(1);
        //可以操作标签的属性和样式。
         div.className = "aaa";
        div.style.width = "200px";
        div.style.height = "200px";
        div.style.backgroundColor = "red";
    }

    2.用函数名绑定)

     不能写写括号,否则成为了返回值    

     div.onclick = fn;
     function fn() {
    //3.书写事件驱动程序。
     alert(1);
     }

 

3.windows.onload事件

 //什么条件下触动这个事件呢?页面加载(文本和图片)完毕的时候。
//用途
//js的加载时和html同步加载的。(如果使用元素在定义元素之间,容易报错。)
//整个页面上所有元素加载完毕在执行js内容
//window.onload可以预防使用标签在定义标签之前。

  案例:

  window.onload = function () {
    var aaa = document.getElementById("box");
    console.log(aaa);
    aaa.style.width = "100px";
}

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

4.一个案例

   关闭京东的广告栏:dom1-05

5.document 文本流

 //节点的访问看看

 <div class="box1">
    <div class="box2" id="box2"></div>
    <div class="box3"></div>
</div>

 

//1.box1是box的父节点
var box2 = document.getElementsByClassName("box2")[0];
var box2 = document.getElementById("box2")
console.log(box2.parentNode);

//2.nextElementSibling下一个兄弟节点
console.log(box2.nextElementSibling);

//3firstElementChild第一个子节点
console.log(box2.parentNode.firstElementChild);

//4所有子节点
console.log(box2.parentNode.childNodes);
console.log(box2.parentNode.children);

//节点的增、删、查、改

 1.创建节点

 var aa=document.craeteElement

 var aaa = document.createElement("li");
2.添加 appendChild(标签节点);
var box1 = document.getElementsByClassName("box1")[0];
box1.appendChild(aaa);
box1.insertBefore(bbb,aaa);//把节点bbb放在aaa之前

3.删除 removeChild(标签节点);
box1.removeChild(bbb);
aaa.parentNode.removeChild(aaa);//自杀,自己删除自己

4.克隆
 var ccc = box1.cloneNode();//默认为false
var ddd = box1.cloneNode(true);
console.log(ccc);
console.log(ddd);

 

 

6.节点属性的获取与赋值

//属性、赋值获取两种方式
//1.元素节点.属性或者元素节点[属性]

<img src="image/jd1.png" class="box" title="图片" alt="京东狗" id="aaa"/>

 Var eleNode=document.getelementbyid(aaa);

eleNode.src = "image/jd2.png";
eleNode.aaa = "bbb";
console.log(eleNode.aaa);
console.log(eleNode.src);
console.log(eleNode.tagName);
console.log(eleNode["title"]);
console.log(eleNode["className"]);
console.log(eleNode["alt"]);

 

//2.元素节点.方法(); getAttributte set...  Remove...3个方法
console.log(eleNode.getAttribute("id"));
eleNode.setAttribute("id","你好");
eleNode.setAttribute("ccc","ddd");
eleNode.removeAttribute("id");

 

 

 

7.案例(经典案例好好看看)

  

8.value  innerHTML  innerText的区别

  <input id="inp1" type="text" value="我是inpput的value属性值"/>
<div id="box1">
    我是box1的内容
    <div id="box2">我是box2的内容</div>
</div>
<div id="box3">
    我是box1的内容
    <div id="box4">我是box2的内容</div>
</div>
<script>

    //value:标签的value属性。
    console.log(document.getElementById("inp1").value);

    //innerHTML:获取双闭合标签里面的内容。(识别标签)
    console.log(document.getElementById("box1").innerHTML);
    document.getElementById("box1").innerHTML = "<h1>我是innerHTML</h1>";

    //innerText:获取双闭合标签里面的内容。(不识别标签)(老版本的火狐用textContent)
    console.log(document.getElementById("box3").innerText);
    document.getElementById("box3").innerText = "<h1>我是innerText</h1>";
</script>

  

                         Dom2(记得查事件)

1,隐藏二维码:核心代码

  

 2.文本框禁用

    btn1.onclick=function(){
               //3.书写事件驱动程序
              input.disabled="no";//填写任何的值都表示true表示禁用
          }
         btn2.onclick=function() {
             input.disabled=false;
         }

3.onfocus获取了焦点  onblur失去焦点(焦点就是光标是否在)

  文本框获取焦点

  

4.重要的访问关系:

  //兄弟节点(前一个和后一个:previousSibling和nextSibling)
  //previousElementSibling和nextElementSibling在IE678中不支持。IE678不能获取文本节点。

  兼容性写法:

  1.前后兄弟节点

  var pre = box3.previousElementSibling || box3.previousSibling;
  var net = box3.nextElementSibling || box3.nextSibling;
  pre.style.backgroundColor = "red";
  net.style.backgroundColor = "yellow";

  2.第一个子节点,最后一个子节点

  var first = box3.parentNode.firstElementChild || box3.parentNode.firstChild;
  var last = box3.parentNode.lastElementChild || box3.parentNode.lastChild;

  3.所有子元素的获取方法:(2种方式)

   var arr = box3.parentNode.children;

    Var arr=box3.parentNode.childNodes;

  4.怎么指定一个节点呢?

var index = 0;
var node = box3.parentNode.children[index];

Html结构如下:

<ul>
    <li class="box1"></li>
    <li class="box2"></li>
    <li id="box3"></li>
    <li class="box4"></li>
    <li class="box5"></li>
</ul>

5.nodeType  nodeName   nodeValue

<div id="box" value="111">你好</div>

<script>

    var ele = document.getElementById("box");//元素节点
    var att = ele.getAttributeNode("id");//属性节点
    var txt = ele.firstChild;

      console.log(ele);

      console.log(att);
     console.log(txt);
    //属性1 nodeType
    console.log(ele.nodeType);//1      
    console.log(att.nodeType);//2
    console.log(txt.nodeType);//3

    //属性2 nodeName
    console.log(ele.nodeName);//DIV
    console.log(att.nodeName);//id 
    console.log(txt.nodeName);//#text

    //属性3 nodeValue
    console.log(ele.nodeValue);//null
    console.log(att.nodeValue);//box
    console.log(txt.nodeValue);//你好

 nodeType:1,document.get

         :2

连续赋值样式:

                                 DOM3

  1.获取元素的函数封装    

    //1.功能:给定元素查找他的第一个子节点,并返回
   function getFirstNode(ele){
    var node=ele.firstElementChild||ele.firstChild;
    return node;
      }
  //2.功能:给定元素查找他的最后一个子节点,并返回
function getLastNode(ele){
    var node=ele.lastElementChild||ele.lastChild;
    return node;
}
  //3.给定元素查找他的下一个元素兄弟的节点,并返回
function getNextNode(ele){
    return ele.nextElementSibling||ele.nextSibling;
}
  //4.给定元素查找他的上一个元素兄返弟的节点,并返回
function getPrevNode(ele){
    return ele.previousElementSibling||ele.previousSibling;
}
/**
 * 5.给定元素和索引值查找 指定索引值的兄弟元素节点,并返回
 * @param ele 元素节点
 * @param index 索引值
 * @returns {*|HTMLElement}
 */
function getEleOfIndex(ele,index){
    return ele.parentNode.children[index];
}

/**
 * 6.寻找一个节点所有的兄弟节点
 * @param ele
 * @returns {Array}
 */
function getAllSiblings(ele){
    //定义一个新的数组,装所有的兄弟元素。并且返回数组
    var newArr=[];
    var arr=ele.parentNode.children;
    for(var i=0;i<arr.length;i++)
    {
        if(arr[i]!=ele)//就是为了把自己排除在外
        {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

    

说明:注释方式,写完一个函数之后,在函数的上方 /** 然后按下enter键即可完成注释

2.如何获取节点的style呢?

  主要有两种方式:box.style.backgroundColor=”red”;

                box.style.cssText = " 200px; height: 200px; line-height:200px;"

3.案例1. 文本高亮显示

  

   案例2:高级隔行变色

  案例3:百变皮肤

4.定位和层级

  

5.dom元素的创建的3种方式:

  (1)document.write();

      For:document.write("<li>我是document.write创建的</li>");

  (2)第二种:直接利用元素的innerHTNL方法。(innerText方法不识别标签)

      var ul = document.getElementsByTagName("ul")[0];

      ul.innerHTML += "<li id='li1'>我是innerHTML创建的</li>"

  (3)document.createElement(”div”);

    var newLi = document.createElement("li");
    newLi.innerHTML = "我是createElement创建的";

6.节点的操作

  (之前已经说过了:就是几种常见节点的操作函数的使用)

   1.document.createElement();

   2. Ele.appenchild(ele1);

   3.ele.removeChild(ele1);

   4.ul.insertBefore(li3,li1);

   5.ul.replaceChild(li3,li2);

在一些案例中反复用到了一种思想(先整体变成一种颜色,然后只更改那个要变的ele)

                                Dom4

1.水果排序案例(占了很大部分)

     

2.定时器是重点

原文地址:https://www.cnblogs.com/z-web-2017/p/6927627.html