DOM操作
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树
DOM树
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
- JavaScript 能够改变页面中的所有 HTML 元素
- JavaScript 能够改变页面中的所有 HTML 属性
- JavaScript 能够改变页面中的所有 CSS 样式
- JavaScript 能够对页面中的所有事件做出反应
一 查找 HTML 元素
通常,通过 JavaScript,您需要操作 HTML 元素。
为了做到这件事情,您必须首先找到该元素。有三种方法来做这件事:
- 通过 id 找到 HTML 元素
- 通过标签名找到 HTML 元素
- 通过类名找到 HTML 元素
(1) 通过 id 查找 HTML 元素
在 DOM 中查找 HTML 元素的最简单的方法,是通过使用元素的 id。
本例查找 id="intro" 元素:
实例
var x=document.getElementById("intro");
如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素。
如果未找到该元素,则 x 将包含 null
(2) 通过标签名查找 HTML 元素
本例查找 id="main" 的元素,然后查找 id="main" 元素中的所有
元素:
实例
var x=document.getElementById("main");
var y=x.getElementsByTagName("p");
(3) 通过类名找到 HTML 元素
本例通过 getElementsByClassName 函数来查找 class="intro" 的元素:
实例
var x=document.getElementsByClassName("intro");
二 HTML DOM - 改变 HTML
(1) 改变 HTML 内容(innerHTML/innerText)
修改 HTML 内容的最简单的方法是使用 innerHTML 属性。
如需改变 HTML 元素的内容,请使用这个语法:
document.getElementById(id).innerHTML=新的 HTML
本例改变了
元素的内容:
实例
Hello World!
实例讲解:
- 上面的 HTML 文档含有 id="header" 的
元素
- 我们使用 HTML DOM 来获得 id="header" 的元素
- JavaScript 更改此元素的内容 (innerHTML)
document.getElementById(id).innerText=新的文本内容
注意:
-
- innerHTML是可以获取节点内 标签和内容
-
- innerText 只能获取节点内的文本内容
-
- innerHTML可以设置html和文本一起的内容 HTML标签会被浏览器所解析
-
- innerText不可以设置html和文本一起的内容 HTML标签不会被浏览器所解析
(2) 改变 HTML 属性 (attribute)
如需改变 HTML 元素的属性,请使用这个语法:
document.getElementById(id).attribute=新属性值
本例改变了
元素的 src 属性:
注意:在jQuery里不能改变input的type类型 出于安全性,只能是只读 如更改input的type
js设置密码的显示隐藏
function pas(){
var i = document.getElementsByTagName('input')[0];
i.type = 'password'
}
function text(){
var i = document.getElementsByTagName('input')[0];
i.type = 'text'
}
三 HTML DOM - 改变CSS
HTML DOM 允许 JavaScript 改变 HTML 元素的样式。
(1) 改变 HTML 样式 (style.property)
如需改变 HTML 元素的样式,请使用这个语法:
document.getElementById(id).style.property=新样式
实例
Hello World!
Hello World!
以上段落通过脚本修改。
获取生效style样式
window.getComputedStyle("元素", "伪类");
style = window.getComputedStyle(box, null); //支持IE9+及非IE浏览器
style = window.getComputedStyle(box, null).width;获取box的width属性值
和style区别
box.style.xxx 只能获取内联样式
getComputedStyle 获取的生效样式可以获取全局的样式
设置多个css样式
1. 设置cssText
element.style.cssText = "样式1,样式2..."
1. 设置style的属性
element.setAttribute('style', 'height: 100px !important');
设置id或者class名称
//设置id
element.setAttribute('id, 'id名称');
element.id = id名称;
//设置class
element.setAttribute('class, 'class名称');
element.className = class名称;
设置多个class
element.className = '样式1 样式2';
element.setAttribute('class','样式1 样式2')
3.通过add方法添加多个类名
document.getElementById("myDIV").classList.add("mystyle", "anotherClass", "thirdClass");
classList
classList 属性返回元素的类名,作为 DOMTokenList 对象。
该属性用于在元素中添加,移除及切换 CSS 类。
classList 属性是只读的,但你可以使用 add() 和 remove() 方法修改它。
(2) 使用事件
HTML DOM 允许我们通过触发事件来执行代码。
比如以下事件:
- 元素被点击。
- 页面加载完成。
- 输入框被修改。
- 输入框被修改。
本例改变了 id="id1" 的 HTML 元素的样式,当用户点击按钮时:
实例
我的标题 1
四 HTML DOM 事件
对事件做出反应
我们可以在事件发生时执行 JavaScript,比如当用户在 HTML 元素上点击时。
如需在用户点击某个元素时执行代码,请向一个 HTML 事件属性添加 JavaScript 代码:
onclick=JavaScript
HTML 事件的例子:
- 当用户点击鼠标时
- 当网页已加载时
- 当图像已加载时
- 当鼠标移动到元素上时
- 当输入字段被改变时
- 当提交 HTML 表单时
- 当用户触发按键时
(1) onclick 点击事件
onclick = javascript
实例
点击文本!
本例从事件处理器调用一个函数:
onclick="changetext(this)"
实例
点击文本!