DOM(文档对象模型)

目录

简单介绍

HTML DOM 节点

节点树

节点间的层级关系

HTML DOM 对象、属性、方法

JavaScript与HTML DOM

JavaScript 代码访问页面上的元素

改变 HTML 元素/属性值

添加/删除 HTML 元素

查找 HTML 元素

改变元素的属性值

 改变CSS样式

JavaScript HTML DOM 事件

addEventListener()

实例

在 HTML DOM 节点树中导航

实例

节点列表

使用节点属性在节点之间导航

 遍历 DOM 树

 添加/删除 HTML 元素

 获取节点的"值"

节点的 nodeValue

实例

创建 添加 新 HTML 元素(节点)

实例

HTML DOM replaceChild() 方法

event 对象

JavaScript console.log() 方法

应用实例

代码

效果


简单介绍

DOM (Document Object Model) 译为文档对象模型,是 HTML 和 XML 文档的编程接口。

HTML DOM 定义了访问和操作 HTML 文档的标准方法。

当网页被加载时,浏览器会创建HTML页面的文档对象模型(Document Object Model)。

HTML DOM 节点

节点树

HTML 文档会被结构化为一棵节点树:

        整个文档是文档节点

        每个 HTML 元素是元素节点

        HTML 元素内的文本是文本节点

        每个 HTML 属性是属性节点

        所有注释是注释节点

节点间的层级关系

顶端节点被称为根(根节点)。

每个节点都有父节点(除了根)。

节点可以拥有一定数量的子节点。

拥有相同的父节点的是同胞(兄弟或姐妹)

HTML DOM 对象、属性、方法

在 HTML DOM 中,所有 HTML 元素被定义为对象,编程接口是对象的属性、方法、事件。其中属性是能够获取或设置的值,方法是能够完成的动作(类似函数,比如添加或删除 HTML 元素)。

部分常用的HTML DOM 方法:

        getElementById(id)   获取带有指定 id 的节点(元素)

        appendChild(node)   插入新的子节点(元素)

        removeChild(node)   删除子节点(元素)

部分常用的 HTML DOM 属性:

        innerHTML    节点(元素)的文本值

        parentNode   节点(元素)的父节点

        childNodes    节点(元素)的子节点

        attributes       节点(元素)的属性节点

JavaScript与HTML DOM

通过网页(HTML文档)的DOM模型,JavaScript 可操纵页面上的元素(对象):

        改变 HTML 元素的内容;

        改变 HTML 元素的样式(CSS);

        对 HTML DOM 事件作出反应;

        添加和删除 HTML 元素。

JavaScript 代码访问页面上的元素

"document" 对象就是HTML文档(网页)本身,其方法用于访问 HTML 元素。

访问 HTML 元素的办法主要包括:

document.getElementById(id)   返回给定 id 的元素;

document.getElementsByTagName(name)  返回标签名对应的元素集合,length属性是元素个数;

document.getElementsByClassName(name)  返回类名对应的元素集合;

预定义名称的 HTML 对象或对象集合,例如:

        document.title               元素<title>

        document.body             元素<body>

        document.images         所有 <img> 元素的集合

        document.anchors        拥有 name 属性的所有 <a> 元素的集合

        document.forms            表单

querySelectorAll()  返回匹配指定 CSS 选择器的 HTML 节点列表。只能通过下标访问,其 length 属性值是节点个数。

改变 HTML 元素/属性值

element.innerHTML = new html content        改变元素内容: inner HTML

element.attribute = new value                        改变 HTML 元素的属性值

element.setAttribute(attribute, value)             改变 HTML 元素的属性值

inputelement.value = new value                    改变 input 元素的 value 值

element.style.property = new style                 改变 HTML 元素的CSS样式

添加/删除 HTML 元素

document.createElement(tag)                      创建 HTML 元素

element.appendChild(node)                         添加 HTML 元素

element.removeChild(node)                         删除 HTML 元素

element.replaceChild(newNode, oldNode)   替换 HTML 元素

document.write(text)                                     写入 HTML 输出流

查找 HTML 元素

getElementById()                                  通过Id查找 HTML 元素

getElementsByTagName()                    通过标签名查找 HTML 元素

getElementsByClassName()                 通过类名查找 HTML 元素

querySelectorAll()                                  通过CSS选择器查找 HTML 元素

改变元素的属性值

<!DOCTYPE html>
<html>
<body>

<img id="myImage" src="smiley.gif">

<script>
    document.getElementById("myImage").src = "landscape.jpg";
</script>

</body>
</html> 

改变CSS样式

<!DOCTYPE html>
<html>
<body>

<h1 id="id1">我的标题 1</h1>

<button type="button" onclick ="document.getElementById('id1').style.color = 'red' ">
		标题变红
</button>

</body>
</html>

JavaScript HTML DOM 事件

JavaScript 程序可以响应网页上发生的事件(比如当用户点击鼠标时、当网页已加载时、当图片已加载时、当鼠标移动到元素上时、当输入字段被改变时、当 HTML 表单被提交时、当用户触发按键时等):

        onclick

        onmouseover / onmouseout

        onfocus / onchange

        onload / onunload

addEventListener()

可以为元素添加(多个)事件处理程序。

element.addEventListener(event, function, useCapture);

useCapture:false/true。决定事件处理顺序由内层元素到外层元素或相反。

removeEventListener(evevt, function) 方法删除已通过 addEventListener() 方法定义的事件处理程序。

实例

element.addEventListener("click", myFunction);

    function myFunction() {
        alert ("Hello World!");
    }
//如果事件处理函数有参数
element.addEventListener("click", function(){ myFunc(p1, p2); });

element.addEventListener("click", function(){ alert("Hello World!"); });

在 HTML DOM 节点树中导航

顶端节点被称为根(根节点)。

每个节点都有父节点(除了根)。

节点可以拥有一定数量的子节点。

拥有相同的父节点的是同胞(兄弟或姐妹)

实例

<html>
    <head>
        <title>标题</title>
    </head>
    <body>
        <h1>example</h1>
        <p>Hi!</p>
    </body>
</html>

 <html> 是根节点,没有父节点

<html> 是 <head> 和 <body> 的父节点

<head> 是 <html> 的第一个子节点

<body> 是 <html> 的最后一个子节点

<head>

        有一个子节点:<title> <title>

        有一个(文本)子节点:"标题"

<body> 有两个子节点:<h1> 和 <p>

<h1> 有一个(文本)子节点:"example"

<p> 有一个(文本)子节点:"Hi!"

<h1> 和 <p> 是同胞

节点列表

getElementsByTagName(tag) 方法返回节点列表。节点列表是一个节点数组。length 属性定义节点列表中节点的数量。

使用节点属性在节点之间导航

通过 JavaScript,可以使用以下节点属性在节点之间导航:

        parentNode

        childNodes[nodenumber]

        firstChild

        lastChild

        nextSibling

        previousSibling

注意:如果对应的节点不存在,结果是null。

 遍历 DOM 树

 

 添加/删除 HTML 元素

document.createElement(tag)                        创建 HTML 元素                    document.createTextNode(text)    

element.appendChild(node)                           添加 HTML 元素 element.insertBefore(newChildNode,childNode)

element.removeChild(node)                            删除 HTML 元素                                            element.remove()

element.replaceChild(newNode, oldNode)     替换 HTML 元素

 获取节点的"值"

节点的 nodeValue

        元素节点的 nodeValue 是 undefined

        文本节点的 nodeValue 是文本

        属性节点的 nodeValue 是属性值

实例

<body>
    <h1 id="first">标题</h1>
</body>

document.getElementById("id01").innerHTML; document.getElementById("id01").firstChild.nodeValue; document.getElementById("id01").childNodes[0].nodeValue;

可以通过以上几种表达获得<h1>元素的内容。

创建 添加 新 HTML 元素(节点)

如需向 HTML DOM 添加新元素,必须先创建这个元素(元素节点),然后将其追加到已有元素。

实例

<div id="div1">
	<p id="p1">这是一个段落。</p>
	<p id="p2">这是另外一个段落。</p>
</div>

<script>
	var para = document.createElement("p");
	var textnode = document.createTextNode("这是新文本。");
	para.appendChild(textnode);
//创建元素节点
	var parent = document.getElementById("div1");
	parent.appendChild(para);
//追加该元素节点到已有元素
</script>

HTML DOM replaceChild() 方法

定义和用法: replaceChild() 方法用新节点替换某个子节点。 这个新节点可以是文档中某个已存在的节点,或者您也可创建新的节点。

语法:node.replaceChild(newnode, oldnode)

返回值:    被替换的节点(Node 对象)。

appendChild(), appendBefore() 返回新添加的节点。                                                          removeChild(), remove() 返回被删除的节点。                                                                        cloneNode() 方法返回调用该方法的节点的克隆体。

默认情况下,节点的nodeName和tagName属性值是HTML标签名,例如P。

event 对象

DOM 中的所有事件对象都基于 Event 对象。

event 对象的属性和方法:

        event.target 返回触发事件的元素。

        event.type 返回事件名称。

JavaScript console.log() 方法

<!DOCTYPE html>
<html>
<body>

<p>按键盘上的 F12 可在控制台视图中查看消息。</p>

<script>
console.log("Hello world!");
</script>

</body>
</html>

应用实例

代码

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width,initial-scale=1">
        <title>
            四个按钮
        </title>
        <style>
            #div1{
                margin:0 auto;
                width: 300px;
                height: 300px;
                border:2px solid;
                background-color: beige;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <script>
            function moveUp(){
                var click = event.target;
                click.style.color = "green";
                var all = document.getElementById('div1');
                var n = all.children.length;
                for(var i = n-1; i>0; i--){
                    var tmp1 = all.children[i].cloneNode(true);
                    all.insertBefore(tmp1 , all.children[i-1]);
                    all.removeChild(all.children[i+1]); 
                }
            }

            function moveDown(){
                var click = event.target;
                click.style.color = "green";
                var all = document.getElementById('div1');
                var n = all.children.length;
                var tmp2 = all.children[0].cloneNode(true);
                all.insertBefore(tmp2 , all.children[n]);
                all.removeChild(all.children[0]);
           }
            function append(){
                var click = event.target;
                click.style.color = "green";
                var all = document.getElementById("div1")
                var frm = document.createElement("form");
                var inp = document.createElement("input");
                inp.type = "text";
                frm.appendChild(inp);
                var BtnOk = document.createElement("input");
                BtnOk.type = "button";
                BtnOk.value = "Ok";
                BtnOk.id = "ok";
                var Ok = document.getElementById("ok");
                frm.appendChild(BtnOk);
                all.appendChild(frm);
                ok.onclick = function(){
                    var node = document.createElement("p");
                    node.innerHTML = frm.elements[0].value;
                    all.replaceChild(node,frm);
                } 
           }
            function remove(){
                var click = event.target;
                click.style.color = "green";
                var all = document.getElementById('div1');
	            var n = all.children.length;
                all.removeChild(all.children[n-1]);
            }
        </script>
        <div id = "div1">
            <p id = "p1">先有鸡</p>
            <p id = "p2">先有蛋</p>
        </div>
        <button onclick = "moveUp()">moveup</button>
        <button onclick = "moveDown()">movedown</button>
        <button onclick = "append()">append</button>
        <button onclick = "remove()">remove</button>
    </body>
</html>

效果

原本

 点击moveup按钮后

点击movedown按钮后

点击append按钮后

点击remove按钮后

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值