JavaScript——DOM节点控制

目录

一、DOM简介

1.1 HTML DOM(文档对象模型)

1.2 查找 HTML 元素

二、HTML DOM 

2.1 改变 HTML 输出流

2.2 改变 HTML 内容

2.3 改变 HTML 属性

三、DOM CSS

3.1 改变 HTML 样式

四、DOM事件

4.1 对事件做出反应

4.2 HTML 事件属性

4.3 使用 HTML DOM 来分配事件

4.3.1 onload 和 onunload 事件

 4.3.2 onchange 事件

 4.3.3 onmouseover 和 onmouseout 事件

4.4.4 onmousedown、onmouseup 以及 onclick 事件

4.4.5 更多实例

五、DOM EventListener

5.1 addEventListener() 方法

5.2 向原元素添加事件句柄

5.3 向 Window 对象添加事件句柄

5.4 传递参数

5.5 事件冒泡或事件捕获

5.6 removeEventListener() 方法

六、DOM元素

6.1 appendChild()

6.2 insertBefore()

6.3 removeChild();

6.4 replaceChild()


一、DOM简介

1.1 HTML DOM(文档对象模型)

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

HTML DOM 模型被构造为对象的树:

通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

  • JavaScript 能够改变页面中的所有 HTML 元素
  • JavaScript 能够改变页面中的所有 HTML 属性
  • JavaScript 能够改变页面中的所有 CSS 样式
  • JavaScript 能够对页面中的所有事件做出反应

1.2 查找 HTML 元素

通常,通过 JavaScript,您需要操作 HTML 元素。

为了做到这件事情,您必须首先找到该元素。有三种方法来做这件事:

  • 通过 id 找到 HTML 元素
var x=document.getElementById("intro");
  • 通过标签名找到 HTML 元素
var x=document.getElementById("main");
var y=x.getElementsByTagName("p");
  • 通过类名找到 HTML 元素
var x=document.getElementsByClassName("intro");

二、HTML DOM 

2.1 改变 HTML 输出流

在 JavaScript 中,document.write() 可用于直接向 HTML 输出流写内容。

document.write(Date());

2.2 改变 HTML 内容

修改 HTML 内容的最简单的方法是使用 innerHTML 属性。

<p id="p1">Hello World!</p>

document.getElementById("p1").innerHTML="新文本!";

2.3 改变 HTML 属性

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

document.getElementById("image").src="landscape.jpg";

三、DOM CSS

3.1 改变 HTML 样式

<p id="p1">Hello World!</p>
<p id="p2">Hello World!</p>

document.getElementById("p2").style.color="blue";
document.getElementById("p2").style.fontFamily="Arial";
document.getElementById("p2").style.fontSize="larger";

四、DOM事件

4.1 对事件做出反应

HTML 事件的例子:

  • 当用户点击鼠标时
  • 当网页已加载时
  • 当图像已加载时
  • 当鼠标移动到元素上时
  • 当输入字段被改变时
  • 当提交 HTML 表单时
  • 当用户触发按键时

我们可以在事件发生时执行 JavaScript,比如当用户在 HTML 元素上点击时。具体需要用到哪些api自行搜索。

如需在用户点击某个元素时执行代码,请向一个 HTML 事件属性添加 JavaScript 代码:

<h1 onclick="this.innerHTML='Ooops!'">点击文本!</h1>

function changetext(id)
{
    id.innerHTML="Ooops!";
}

<h1 onclick="changetext(this)">点击文本!</h1>

4.2 HTML 事件属性

如需向 HTML 元素分配 事件,您可以使用事件属性。

<button onclick="displayDate()">点这里</button>

 在上面的例子中,名为 displayDate 的函数将在按钮被点击时执行。

4.3 使用 HTML DOM 来分配事件

HTML DOM 允许您使用 JavaScript 来向 HTML 元素分配事件:

<script>
document.getElementById("myBtn").onclick=function(){displayDate()};
</script>

4.3.1 onload 和 onunload 事件

onload 和 onunload 事件会在用户进入或离开页面时被触发。

onload 和 onunload 事件可用于处理 cookie。

<body onload="checkCookies()">

 4.3.2 onchange 事件

onchange 事件常结合对输入字段的验证来使用。

当用户改变输入字段的内容时,会调用 upperCase() 函数。

<input type="text" id="fname" onchange="upperCase()">

 4.3.3 onmouseover 和 onmouseout 事件

 onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数。

4.4.4 onmousedown、onmouseup 以及 onclick 事件

onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发 onmouseup 事件,最后,当完成鼠标点击时,会触发 onclick 事件。

4.4.5 更多实例

onmousedown 和onmouseup
当用户按下鼠标按钮时,更换一幅图像。

onload
当页面完成加载时,显示一个提示框。

onfocus
当输入字段获得焦点时,改变其背景色。

鼠标事件
当指针移动到元素上方时,改变其颜色;当指针移出文本后,会再次改变其颜色。

五、DOM EventListener

5.1 addEventListener() 方法

document.getElementById("myBtn").addEventListener("click", displayDate);

addEventListener()方法用于向指定元素添加事件句柄。方法添加的事件句柄不会覆盖已存在的事件句柄。你可以向一个元素添加多个事件句柄。也可以向同个元素添加多个类型的事件句柄。你可以向任何DOM对象添加事件监听,不仅是HTML元素,也包括window对象等。addEventListener()方法可以更简单的控制事件(冒泡与捕获)。监听可以通过removeEventListen()方法来移除。

element.addEventListener(event, function, useCapture);

第一个参数是事件的类型 (如 "click" 或 "mousedown").

第二个参数是事件触发后调用的函数。

第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

5.2 向原元素添加事件句柄

addEventListener() 方法允许向同一个元素添加多个事件,且不会覆盖已存在的事件:

element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);

你可以向同个元素添加不同类型的事件:

element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);

5.3 向 Window 对象添加事件句柄

addEventListener() 方法允许你在 HTML DOM 对象添加事件监听, HTML DOM 对象如: HTML 元素, HTML 文档, window 对象。或者其他支持的事件对象如: xmlHttpRequest 对象。

window.addEventListener("resize", function(){
    document.getElementById("demo").innerHTML = sometext;
});

5.4 传递参数

当传递参数值时,使用"匿名函数"调用带参数的函数:

element.addEventListener("click", function(){ myFunction(p1, p2); });

5.5 事件冒泡或事件捕获

事件传递有两种方式:冒泡与捕获。

事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

addEventListener(eventfunctionuseCapture);

document.getElementById("myDiv").addEventListener("click", myFunction, true);

5.6 removeEventListener() 方法

removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄

element.removeEventListener("mousemove", myFunction);

六、DOM元素

6.1 appendChild()

要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它。

//以下代码是用于创建 <p> 元素:
var para = document.createElement("p");

//为 <p> 元素创建一个新的文本节点:
var node = document.createTextNode("这是一个新的段落。");

//将文本节点添加到 <p> 元素中:
para.appendChild(node);

//最后,在一个已存在的元素中添加 p 元素。
//查找已存在的元素:
var element = document.getElementById("div1");

//添加到已存在的元素中:
element.appendChild(para);

6.2 insertBefore()

以上的实例我们使用了 appendChild() 方法,它用于添加新元素到尾部。

如果我们需要将新元素添加到开始位置,可以使用 insertBefore() 方法:

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
 
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
 
var element = document.getElementById("div1");
var child = document.getElementById("p1");
element.insertBefore(para, child);
</script>

6.3 removeChild();

要移除一个元素,你需要知道该元素的父元素。

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
 
<script>
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.removeChild(child);
</script>

6.4 replaceChild()

我们可以使用 replaceChild() 方法来替换 HTML DOM 中的元素。

<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
 
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
 
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值