01-DOM(节点内容操作)

DOM操作一

HTML DOM是HTML Document Object Model(文档对象模型)的缩写

HTML DOM则是专门适用于HTML/XHTML的文档对象模型。

熟悉软件开发的人员可以将HTML DOM理解为网页的API。

它将网页中的各个元素都看作一个个对象,从而使网页中的元素也可以被计算机语言(js)获取或者编辑。

例如Javascript就可以利用HTML DOM动态地修改网页。

事件

事件源、事件、事件驱动程序。

事件源 :要触发的对象 (一般是名词,事件发起者,比如开关按钮)

事件:怎么触发这个事情 (一般是动词,触发事件,比如点击开关)

事件处理程序:发生了什么事情 (处理结果,比如灯亮了)

js做什么:获取事件源、绑定事件、书写事件驱动程序

常用事件:

  • 属性 当以下情况发生时,出现此事件
    onabort 图像加载被中断
    ==onblur== 元素失去焦点
    ==onchange== 用户改变域的内容
    ==onclick== 鼠标点击某个对象
    ondblclick 鼠标双击某个对象
    onerror 当加载文档或图像时发生某个错误
    ==onfocus== 元素获得焦点
    onkeydown 某个键盘的键被按下
    onkeypress 某个键盘的键被按下或按住
    onkeyup 某个键盘的键被松开
    ==onload== 某个页面或图像被完成加载
    onmousedown 某个鼠标按键被按下
    onmousemove 鼠标被移动
    onmouseout 鼠标从某元素移开,支持冒泡
    onmouseover 鼠标被移到某元素之上,支持冒泡
    onmouseup 某个鼠标按键被松开
    onreset 重置按钮被点击
    ==onresize== 窗口或框架被调整尺寸
    onselect 文本被选定
    onsubmit 提交按钮被点击
    onunload 用户退出页面
    ==onscroll== 元素滚动条在滚动时触发。
    ==onmouseenter== 某个鼠标按键被按下,不支持冒泡
    ==onmouseleave== 在鼠标指针移出元素上时触发,不支持冒泡
    onmousewheel 当鼠标滚轮正在被滚动时触发

DOM

dom元素指的是页面的标签,

通过任意一个dom元素的关系可以找到当前页面其他任意的一个dom.

DOM的获得

ID选择器

  • Idocument.getElementById("demo");
  • 最准确的 需要获取的dom元素,必须有id
  • 而且一个页面不能有重复的id

标签选择器

  • document.getElementsByTagName("div");
  • 没办法定位元素
  • ==本质是数组类型==,需要通过下标选定标签
    • document.getElementsByTagName("div")[0];

class选择器

  • document.getElementsByClassName("a");
  • 如果在移动使用,移动端浏览器完全支持。
  • ie6,7,8不支持! 而且ie8不支持console.log
  • ==本质是数组类型==,需要通过下标选定标签
    • document.getElementsByClassName("a")[0];

NODE节点

node节点指的是页面的任意元素,

标签 换行符 注释 空格 属性 标签内容等都可以被当做node节点,

当然既然是节点,也是可以被js选中的,因此可以通过DOM节点之间的相对关系对它们进行访问。

node节点的访问关系

  • ==以属性的方式存在的==。 A.parent a.parent();

  • 选定节点后,可以将标签中的属性用javascript的中.(点)的方法调用

    • //点击div元素,使其变为红色,通过元素的style属性使其变色
      //在js中操作css中的属性,一般会把abc-xx转换为abcXx 驼峰命名法
      //background-color ==> backgroundColor
      div.onclick = function(){
                  pNode.style.backgroundColor = 'red';
              }
      

parentNode 父节点

调用者就是节点,一个节点只有一个父节点。

调用方式就是节点.parentNode.

  • dom.parentNode ==> 通过dom获取其父类节点.

    •  // 通过下标获取子元素标签
          var boxItem = document.getElementsByClassName('innerBox')[0];
          // api:  dom.parentNode  ==> 通过dom获取其父类节点.
          //通过子元素标签利用.parentNode,获取父元素
          var box = boxItem.parentNode;
      

兄弟节点

调用者是节点。(存在浏览器兼容问题)

IE678中指下一个(上一个)元素节点(甚至包括标签、注释)。

在火狐谷歌IE9+(标准)以后都指的是下一个(上一个)节点(包括空文档和换行节点)。

nextSibling 下一个元素节点

  • 火狐谷歌IE9+(标准)以后包括空文档和换行节点,导致出错
  • 新标准: nextElementSibling 用于火狐谷歌IE9+(标准)以后版本
  • 兼容写法: box =this.nextElementSibling || this.nextSibling

previousSibling 上一个元素节点

  • 同上
  • 新标准: previousElementSibling 用于火狐谷歌IE9+(标准)以后版本
  • 兼容写法: box =this.previousSibling || this.previousElementSibling

子节点

单个子节点

firstChild: 调用者是父节点。
  • IE678中指第一个子元素节点(标签)
  • 在火狐谷歌IE9+以后都指的是第一个节点(包括空文档和换行节点)。
  • 新标准: firstElementChild: 用于火狐谷歌IE9+(标准)以后版本
lastChild: 调用者是父节点。
  • IE678中指最后一个子元素节点(标签)
  • 在火狐谷歌IE9+以后都指的是最后一个节点(包括空文档和换行节点)。
  • 新标准: lastElementChild: 用于火狐谷歌IE9+(标准)以后版本

所有子节点

childNodes: 调用者是父节点。
  • 它返回指定元素的子元素集合,包括HTML节点,所有属性,文本节点
  • 火狐 谷歌等高本版会把换行也看做是子节点
  • 常用: children:非标准属性,它返回指定元素的子元素集合,只返回HTML节点,甚至不返回文本节点,几乎所有浏览器都支持。IE6/7/8中包含注释节点

区分不同类型的节点

nodeType:

  • 属性可用来区分不同类型的节点,比如 元素, 文本 和 注释,可用来兼容ie8以下的浏览器
  • nodeType == 1 表示的是元素节点 记住 元素就是标签
  • nodeType == 2 表示是属性节点 已弃用
  • nodeType == 3 是文本节点 了解
  • nodeType == 8 注释 了解

处理兼容问题:

// 封装好的兼容ie8和标准浏览器的获取孩子节点的方法
function myChildren(node){
    var myChildrenArr = [] ;
    var childrenArr = node.children; //拿到的是node的所有的孩子节点,包括ie中的注释节点
    for(var n in childrenArr){
        if(childrenArr[n].nodeType == 1){   //选择出所有的标签节点
            myChildrenArr.push(childrenArr[n]);
        }
    }
    return myChildrenArr;
}   

DOM节点操作:

增删改查 CURD create update read delete

创建节点

createElement()

  • var pEle = document.createElement('img'); 创建一个img标签节点

插入节点

appendChild()

  • div.appendChild(pEle); 插入img标签节点,到div里

insertBefore()

  • div.insertBefore(img,span) ;将img标签放到 div下的span上面

删除节点

removeChild()

  • div.removeChild('img'); 删除div下的img标签

克隆节点

cloneNode(true)

  • var div = oldNode.cloneNode(true);如果没有true为浅克隆,不包括div下的子元素
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div class="box">
        
    </div>
    <button class="btn">删除img2图片</button>
    <button class="btn2">clone box</button>
    <script>
        var boxDiv = document.getElementsByClassName('box')[0];
        var btn = document.getElementsByClassName('btn')[0];
        var btn2 = document.getElementsByClassName('btn2')[0];
        //创建一个p标签
        // 创建完了需要插入
        var pEle = document.createElement('p');
        pEle.innerText = '欢迎来到不凡学院';
        var img = document.createElement('img');
        var img2 = document.createElement('img');
        img.src = 'img/fbb.jpg';
        img2.src = 'img/fbb.jpg';
        // 通过父节点插入子节点
        boxDiv.appendChild(pEle);
        boxDiv.appendChild(img);
        // 同一个对象不能重复插入
        // 将img2插入到pEle前面
        boxDiv.insertBefore(img2,pEle);
        btn.onclick = function(){
            // 父节点.removeChild(子节点)。
            // boxDiv.removeChild(img2);
            // node.parentNode.removeChild(node)
            img2.parentNode.removeChild(img2);
        }
        btn2.onclick = function(){
            var scriptEle = document.getElementsByTagName('script')[0];
            //克隆标签节点 如果没有传递true则为浅克隆.
            var newBox = boxDiv.cloneNode(true);
            //单clone不插入是没有效果的
            //document.body ==> 获取body对象
            // document.body.appendChild(newBox);
            document.body.insertBefore(newBox,scriptEle);
        }

    </script>
</body>
</html>

节点属性

获取调用它的元素的某个属性的值

getAttribute()

  • this.getAttribute('class'); 获取调用它的元素的class的值

设置调用它的元素的某个属性的值

setAttribute()

  • div.setAttribute("style", "background-color: pink;");将div的style属性里的背景设置为pink

删除调用它的元素的某个属性的值

removeAttribute()

  • div.removeAttribute('id');删除div的id属性

内容操作

设置输入框的初始值

.value

  • inputEl.value = Math.floor(Math.random()(100-1)+1);* 将inputEl指向的输入框里面添加一个(1~100)的随机数

在节点中添加文本

.innerText

  • 可读写

  • div.innerText = '只是文字不能html解析'; 在div中添加文字内容;

在节点中添加HTML代码

.innerHTML

  • 可读写

  • div.innerHTML = '<h1>我是h1标签</h1>'; 在div中添加文字内容;

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

推荐阅读更多精彩内容

  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 3,613评论 0 7
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,473评论 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,421评论 1 45
  •   DOM 1 级主要定义的是 HTML 和 XML 文档的底层结构。   DOM2 和 DOM3 级则在这个结构...
    霜天晓阅读 1,422评论 1 3
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,096评论 0 21