DOM基础知识、元素获取、节点操作

1 Web APls

JavaScript的组成
ECMAScript
Web APls
BOM - 浏览器对象模型
一套操作浏览器功能的API
通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
DOM - 文档对象模型
一套操作页面元素的API
DOM可以把HTML看作时文档树,通过DOM提供的API可以对树上的节点进行操作

2 DOM

2.1 基本概念

文档对象模型(Documnet Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言的标准编程接口
它是一种与平台和语言无关的应用程序接口,它可以动态的访问程序和脚本,更新其内容、结构和文档的风格

2.2 DOM又称为文档树模型

1)概念
文档:一个网页可以称为文档
节点:网页中的所有内容都是节点(标签、属性、文本、注释)
元素:网页中的标签
属性:标签的属性
2)DOM常用操作
获取文档元素
对文档元素进行增删改查操作
事件操作

2.3 window和document

1)window
所有的浏览器都支持window对象,它支持浏览器窗口
所有的js全局对象、函数以及变量都能自动称为window对象的成员
全局变量是window对象的属性,全局函数是window对象的方法
2)document
document也是window对象的属性之一
document对象是documentHTML的一个实例,也是window对象的一个属性,因此可以将document对象作为一个全局对象来访问

常用属性

console.log(document);
console.log(document.childNodes);
console.log(document.head);
console.log(document.body);
docment.title = "测试";

//获取id
<div id = "box"></div>
<script>
var box = document.getElementById('box');
</script>

2.4 事件

1)事件
触发 - 响应机制
用户和浏览器之间的交互行为,比如:点击按钮,鼠标进入/离开
2)事件三要素
事件源:触发(被)事件的元素
事件名称:click点击事件
事件处理程序:事件出发后要执行的代码(函数形式)
3)使用方式

<button id = "btn"></button>
<script>
var btn = document.getElementById('btn');
btn.onclick = fucntion(ev) {    //ev  匿名函数
    alert('点了');
}
</script>

2.5 文档加载过程

浏览器加载页面是自上而下的顺序加载的
建议把script放在最后

2.6 文档页面元素获取

1)根据id获取元素
document.getElementById('string')
2)根据标签名获取元素
document.getElementsBytagName('string')[0]
3)根据name获取元素
document.getElementsByName('string')[0]
4)根据类名获取元素
document.getElementsByClassName('string')[0]
拿到的是一个集合(数组),因为class可以多次名命
5)根据选择器获取元素
document.querySelector('string')
document.querySelectorAll('string')[0]

2.7 节点之间的关系

<div id = "box">
    <button id = "btn"></button>
    <span id = "span">
        <a id="lk" href = "#">明日香</a>
    </span>
    <p id = "yes"></p>
    <div id = "box2"></div>
</div>
<script>
    //获取父节点
    window.onload = function(ev) {
        var a = document.getElementsById('lk');
        console.log(a);
        console.log(a.parentNode);    //span
        console.log(a.parentNode.parentNode);    //div
    
    //获取兄弟节点
    var span = document.getElementById('span');
    var nextEle = span.nextElementSibling  ||  span.nextSibling;    //注意:换行也是一个节点
    console.log(nextEle);    //p
    var preEle = span.previousElementSibling  ||  span.previousSibling;
    console.log(preEle);    //button
}

    //第一个子元素和最后一个子元素
    var box = docment.getElementById('box');
    box.firstElementChild  ||  box.firstChild;
    box.lastElementChild  ||  box.lastChild;
   
     //获取所有的节点
    box.childNodes;    //所有节点(包括空格、回车等)
    box.children;    //所有元素节点
</script>

nodeType
每个节点都有一个 nodeType属性,用于表明节点的类型,节点类型由Node类型中定义12个常量表示

cea4acf9fbe243897ba5d613ca27974.png

//过滤
window.onload = function(ev) {
    //获取标签
    var box = document.getElementById('box');
    //获取标签内部的所有节点
    var allNodeLists = box.childNodes;
    //过滤元素节点
    var newListArr = [];
    allNodelists.forEach(function (value,index,array) {
        if(value.nodeType === 1) {
            newListArr.push(value);
        }
    });
}

2.8 节点操作

1)CRUD(增删改查)

<div id = "box">
    <p id = "word">MRX</p?
    <button id = "btn">点我</button>
</div>
<script>
    window.onload = function(ev) {
        var box = document.getElementsById('box');
        var btn = document.getElementsById('btn');
        //创建节点
        var img = document.createElement('img');    //创建一个新的元素‘img’
        img.src = 'img/img_01.jpg';
        box.appendChild(img);      //追加
        //insertBefore(需要插入的节点对象,在其之前插入);
        box.insertBefore(img,btn);    //插入
        
        //删除节点
        btn.remove();    //删除自身
        box.removeChild(btn);    //删除box子节点btn

        //克隆标签,不能有id,以下只是举例
        /*
        var newBox = box.cloneNode();    //浅克隆,只克隆本身;()内是布尔类型
        var newBox = box.coneNode(true);    //深克隆,克隆全部
        document.body.appendChild(newBox);
        */
}
</script>

2)节点属性操作
获取:getAttribute(名称);
设置:setAttribute(名称,值);
删除:removeAttribute(名称)

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

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,470评论 1 11
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,095评论 0 21
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,752评论 0 8
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,072评论 0 3
  • 第1章 认识JS JavaScript能做什么?1.增强页面动态效果(如:下拉菜单、图片轮播、信息滚动等)2.实现...
    mo默22阅读 1,238评论 0 5