DOM概述一

类操作className

  //1.获取事件源和相关元素
    var closeBanner = document.getElementById("closeBanner");
    var topBanner = document.getElementById("topBanner");
    //2.绑定事件
    closeBanner.onclick = function () {
        //3.书写事件驱动程序
//        console.log(1);
        //类控制
//        topBanner.className += " hide"; //保留原类名,添加新类名
        topBanner.className = "hide";//替换旧类名
//        topBanner.style.display = "none";
    }

解析过程

HTML加载完毕,渲染引擎会在内存中把HTML文档,生成一个DOM树,getElementById是获取内中DOM上的元素节点。然后操作的时候修改的是该元素的属性。

DOM 的数据结构(树状)

A78AFE90-DC6F-4DE1-95CA-CCB472BFC431.png

HTML 的组成部分为节点( Node

在 HTML 当中一切都是节点......
由结构图中我们可以看到,整个文档就是一个文档节点。
每一个 HMTL 标签都是一个元素节点(标签)。
标签中的文字则是文字节点。(文本)
标签的属性是属性节点。(属性)

DOM节点的获得

操作节点,必须首先找到该元素。有三种方法来做这件事:

通过 id 找到 HTML 元素
document.getElementById("demo");

通过标签名找到 HTML 元素(返回的是标签数组)
document.getElementsByTagName("div");

通过类名找到 HTML 元素(返回的是标签数组)
document.getElementsByClassName("a");
通过类名查找 HTML 元素在 IE 5,6,7,8 中无效

DOM 访问关系(节点的获得)

父节点 ( parentNode )

调用者就是节点。一个节点只有一个父节点。调用方式就是节点.parentNode

兄弟节点

nextSibling
IE678 中指下一个元素节点(标签)。在火狐 谷歌 IE9+以后都指的是下一个节点(包括空文档和换行节点)。

nextElementSibling
在火狐谷歌 IE9 都指的是下一个元素节点

总结:在 IE678 中用 nextSibling,在火狐谷歌 IE9+以后用 nextElementSibling。

下 一 个 兄 弟 节 点 =节 点 .nextElementSibling || 节 点 .nextSibling

previousSibling
IE678 中指前一个元素节点(标签)。在 火狐谷歌 IE9+以后都指的是前一个节点(包括空文档和换行节点)。

previousElementSibling
在火狐谷歌 IE9 都指的是前一个元素节点。

总结:在 IE678 中用 previousSibling,在火狐谷歌 IE9+以后用 previousElementSibling。

下 一 个 兄 弟 节 点 =节 点 .previousElementSibling|| 节 点 .previousSibling

单个子节点

firstChild
IE678 中指第一个子元素节点(标签)。在火 狐谷歌 IE9+以后都指的是第一个节点(包括空文档和换行节点)。

firstElementChild:在火狐谷歌 IE9 都指的第一个元素节点。

第 一 个 子 节 点 =父 节 点 .firstElementChild || 父 节 点 .firstChild

lastChild
IE678 中指最后一个子元素节点(标签)。在火 狐谷歌 IE9+以后都指的是最后一个节点(包括空文档和换行节点)。

lastElementChild:在火狐谷歌 IE9 都指的最后一个元素节点。

第 一 个 子 节 点 =父 节 点 .lastElementChild|| 父 节 点 .lastChild

所有子节点

childNodes:它是标准属性,它返回指定元素的子元素集合,包括 HTML 节点,所有属性,文本节点 (他还是 W3C 的亲儿子 )

火狐 谷歌等高本版会把换行也看做是子节点

nodeType==1 时才是元素节点(标签)
nodeType == 2 表示是属性节点 了解
nodeType == 3 是文本节点 了解

子节点数组 = 父节点.childNodes; 获取所有节点。

children:非标准属性,它返回指定元素的子元素集合。

但它只返回 HTML 节点,甚至不返回文本节点,虽然不是标准的 DOM 属 性,但它和 innerHTML 方法一样,得到了几乎所有浏览器的支持。

children 在 IE6/7/8 中包含注释节点,在 IE678 中,注释节点不要写在里面。

子节点数组 = 父节点.children; 用的最多。

节 点 自 己 .parentNode.children[index];随 意 得 到 兄 弟 节 点 。

获取所有的兄弟节点

      function siblings(elm) {
           var a = [];
          var p = elm.parentNode.children; 
           for(var i =0,pl= p.length;i<pl;i++) {
                if(p[i] !== elm) a.push(p[i]); 
            }
          return a; 
      }

DOM 节点操作

创建节点

使用方法是这样的document.createElement();

新的标签(节点) = document.createElement(“标签名”);

插入节点

  • 父节点.appendChild(新节点); 父节点的最后插入一个新节点

  • 父节点.insertBefore(新节点,参考节点)在参考节点前插入;
    如果参考节点为null,那么他将在节点最后插入一个节点

删除节点

父节点.removeChild(子节点);必须制定要删除的子节点

不知道父级的情况下,可以这么写:node.parentNode.removeChild(node)

复制节点

想要复制的节点调用这个函数cloneNode(),得到一个新节点。 方法内部可以传参,入股是true,深层复制,如果是false,只复制节点本身。

新节点=要复制的节点.cloneNode(参数) ;

用于复制节点, 接受一个布尔值参数, true 表示深复制(复制节点及其所有子节点), false 表示浅复制(复制节点本身,不复制子节点)

节点属性

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script>
        window.onload = function () {

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

            //属性、赋值获取两种方式
            //1.元素节点.属性或者元素节点[属性]
            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.元素节点.方法();
            console.log(eleNode.getAttribute("id"));
            eleNode.setAttribute("id","你好");
            eleNode.setAttribute("ccc","ddd");

            eleNode.removeAttribute("id");
        }
    </script>
</head>
<body>
<img src="image/jd1.png" class="box" title="图片" alt="京东狗" id="aaa"/>
</body>
</html>

前端Dom操作

关闭京东广告栏

  //1.获取事件源和相关元素
    var closeBanner = document.getElementById("closeBanner");
    var topBanner = document.getElementById("topBanner");
    //2.绑定事件
    closeBanner.onclick = function () {
        //3.书写事件驱动程序
//        console.log(1);
        //类控制
//        topBanner.className += " hide"; //保留原类名,添加新类名
        topBanner.className = "hide";//替换旧类名
//        topBanner.style.display = "none";
    }

京东狗

    <script>
        //window.onload页面加载完毕以后再执行此代码
        window.onload = function () {
            //需求:鼠标放到img上,修改路径(src的值)。
            //步骤:
            //1.获取事件源
            //2.绑定事件
            //3.书写事件驱动程序

            //1.获取事件源
            var img = document.getElementById("box");
            //2.绑定事件(悬停事件:鼠标进入到事件源中立即出发事件)
            img.onmouseover = function () {
                //3.书写事件驱动程序(修改src)
                img.src = "image/jd2.png";
//                this.src = "image/jd2.png";
            }


            //1.获取事件源
            var img = document.getElementById("box");
            //2.绑定事件(悬停事件:鼠标进入到事件源中立即出发事件)
            img.onmouseout = function () {
                //3.书写事件驱动程序(修改src)
                this.src = "image/jd1.png";
            }

            //获取事件源(元素可以不获取直接使用id的值)
//            var img = document.getElementById("box");
//            //调用函数
//            img.onmouseover = fn1;
//            img.onmouseout = fn2;
//            //定义函数
//            function fn1() {
//                img.src = "image/jd2.png";
//            }
//            function fn2() {
//                img.src = "image/jd1.png";
//            }

        }
    </script>

Js中的父子兄访问关系

A749C136-3BE9-457D-B40B-36FCA22D707F.png

一般常用的就是parentNode 和children,
节点自己.parentNode.children[index];随意得到兄弟节点

创建节点

    //1.创建
    var aaa = document.createElement("li");

插入节点

 //插入节点
    var box1 = document.getElementsByClassName("box1")[0];

   //父节点.appendChild(新节点); 父节点的最后插入一个新节点
    box1.appendChild(aaa);

  //父节点.insertBefore(新节点,参考节点)在参考节点前插入;如果参考节点为null,那么他将在节点最后插入一个节点
    box1.insertBefore(bbb,aaa);

删除节点

 box1.removeChild(bbb);
 aaa.parentNode.removeChild(aaa);//自杀,自己删除自己

克隆节点

用于复制节点, 接受一个布尔值参数,
 true 表示深复制(复制节点及其所有子节点), 
false 表示浅复制(复制节点本身,不复制子节点)
 var ccc = box1.cloneNode();
 var ddd = box1.cloneNode(true);

value和innerHTML和innerText。

    //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>";
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1、解析过程HTML加载完毕,渲染引擎会在内存中把HTML文档,生成一个DOM树,getElementById是获...
    嗨黄先生阅读 529评论 0 0
  • DOM DOM内容主要分为四部分: 什么是DOM和节点; 获取节点; 节点操作(3种); 属性操作(3种)。 什么...
    magic_pill阅读 771评论 0 1
  • 一、基本概念 1.1、DOM DOM是JS操作网页的接口,全称为“文档对象模型”(Document Object ...
    周花花啊阅读 3,161评论 0 6
  • 当真正的死亡来临之时,你永远只是同一副面孔:恐慌,流泪,平静,接受,疗伤。 这两天心里很难过,我爸的二哥,也就是我...
    鹿君阅读 246评论 0 1
  • 玄龙空间中,大战逐渐的落幕,留下残破的大地,诉说着先前的战斗是何等的激烈与凶狠。 牧尘面色有些凝重的望着那尸天幽消...
    混沌天书阅读 394评论 0 0