目录
1.0 概述
1.0 什么是Window?
window:是一个全局对象,代表浏览器中打开的窗口,每个窗口都是一个Window对象
2.0 什么是document?
document:是Window的一个属性,这个属性是一个对象.它代表当前窗口中的整个网页,
通过document对象我们可以操作整个网页上的所有内容
3.0 什么是DOM?
DOM:定义了访问和操作 HTML文档(网页)的标准方法,全称为:Document Object Model 文档模型对象
注:在JavaScript中的HTML标签也叫做DOM元素,使用document的时候前面不用加window
2.0获取DOM元素
1.0 通过id获取指定元素
document.getElementById("id名称")
注:由于id不可以重复,所以找到了就会将找到的标签包装成一个对象返回给我们,找不到就返回Null
DOM操作返回的是一个对象,这个对象是宿主类型对象(由浏览器提供对象)
2.0通过class名称获取
document.getElementsByClassName("类名");
3.0通过name名称获取
document.getElementsByName("name名称");
4.0 通过标签名称获取
document.getElementsByTagName("div");
5.0 通过选择器获取
注: querySelector只会返回根据指定选择器找到的第一个元素
document.querySelector("选择器名称");
6.0 通过选择器获取全部
document.querySelectorAll("选择器名称");
1.0获取指定元素所有子元素
语法: 元素名.children 获取到的是指定元素中所有的子元素
元素名.childNodes 获取到指定元素中所有的节点
节点:DOM对象(document),这个对象以树的形式保存了界面上的所有内容,HTMl页面每一部分都是由节点(标签(元素),文本,属性)
常量 | 值 | 描述 |
---|---|---|
Node.ELEMENT_NODE | 1 | 一个 元素 节点,例如 <p> 和 <div> 。 |
Node.TEXT_NODE | 3 | Element 或者 Attr 中实际的 文字 |
Node.CDATA_SECTION_NODE | 4 | 一个 CDATASection ,例如 <!CDATA[[ … ]]> 。 |
Node.PROCESSING_INSTRUCTION_NODE | 7 | 一个用于XML文档的 ProcessingInstruction ,例如 <?xml-stylesheet ... ?> 声明。 |
Node.COMMENT_NODE | 8 | 一个 Comment 节点。 |
Node.DOCUMENT_NODE | 9 | 一个 Document 节点。 |
Node.DOCUMENT_TYPE_NODE | 10 | 描述文档类型的 DocumentType 节点。例如 <!DOCTYPE html> 就是用于 HTML5 的。 |
Node.DOCUMENT_FRAGMENT_NODE | 11 | 一个 DocumentFragment 节点 |
let Div = document.querySelector("div");
console.log(Div.children);
console.log(Div.childNodes);
for(let node of Div.childNodes){
console.log(node.nodeType); //文本节点输出3 其它节点输出1
}
2.0 节点
获取指定元素的所有子元素 let oDiv = document.querySelector("div");
let item = document.querySelector(".item")
获取指定节点中的第一个子节点 | oDiv.firstChild | |
获取指定元素中的第一个子元素 | oDiv.firstElementChild | |
获取指定节点中最后一个子节点 | oDiv.lastChild | |
获取指定元素中的最后一个子元素 | oDiv.lastElementChild | |
通过主元素获取父元素 | item.parentElement | 结果相同 企业开发中的兼容性写法 parentEle = item.parentElement | | item.parentNode
|
通过主元素获取父节点 | item.parentNode | |
获取相邻的上一个节点 | item.previousSibling | |
获取相邻的上一个元素 | item.previousElementSibling | |
获取相邻的下一个节点 | item.nextSibling | |
获取相邻的下一个元素 | item.nextElementSibling |
7.0 创建节点
创建节点: document.createElement("标签名称");
将标签添加到某一个标签中 : oDiv.appendChild(oSpan);
let oSpan = document.createElement("span"); //创建一个span标签
let oA = document.createElement("a"); //创建一个a标签
let oDiv = document.querySelector("div");
oDiv.appendChild(oSpan); // 将创建的span标签添加到第一个div标签中
oDiv.appendChild(oA);
8.0 添加节点
Node.appendChild()
方法将一个节点添加到指定父节点的子节点列表末尾。
语法:
var child = node.appendChild(child);
node
是要插入子节点的父节点.child
即是参数又是这个方法的返回值.
注意点: appendChild方法会将指定的元素添加到最后
9.0 节点插入
Node.insertBefore() 方法在参考节点之前插入一个拥有指定父节点的子节点。
语法:
var insertedNode = parentNode.insertBefore(newNode, referenceNode);
insertedNode
已经经过插入newNode
的新的节点parentNode
新插入节点的父节点newNode
用于插入的节点referenceNode
newNode
将要插在这个节点之前如果
referenceElement
为null
则newNode
将被插入到子节点的末尾。
let oSpan = document.createElement("span"); //创建一个span标签
let oDiv = document.querySelector("div");
let oform = document.querySelector("form");
oDiv.insertBefore(oSpan,oform); // 将新创建的span标签添加到form标签的前面
10.0 删除节点
注:在JavaScript中如果想要删除某一个元素,只能通过对应的父元素来删除,不能自己删除自己.
let oDiv = document.querySelector("div");
oDiv.parentNode.removeChild(oDiv); //获取div标签的父节点,将div标签删除掉
11.0 克隆节点
Node.cloneNode()
方法返回调用该方法的节点的一个副本.
语法:
var dupNode = node.cloneNode(deep);
node
将要被克隆的节点
dupNode
克隆生成的副本节点
deep
可选是否采用深度克隆
,如果为true,
则该节点的所有后代节点也都会被克隆,如果为false,则只克隆该节点本身.
注: cloneNode方法默认不会克隆标签中的子元素,如果想克隆主元素需要传递一个true
et oDiv = document.querySelector("div");
//let newDiv = oDiv.cloneNode(); // 克隆后的div不包含原div中的元素
let newDiv = oDiv.cloneNode(true); // 克隆后的div包含原div中的元素
console.log(newDiv);
3.0元素属性操作
无论是通过document创建还是查询出来的标签,系统都会将元素包装成一个对象返回给我们,系统在包装这个对象的时候会自动将元素的属性都包装到这个对象中,所以只要拿到这个对象就可以拿到标签属性,操作标签属性.
获取元素属性
语法:
元素对象名称.属性名称 该方法无法显示自定义属性
元素对象名称.getAttribute("属性名称") 该方法可以显示自定义属性
<img src="../images/timg.jpg" alt="无法显示图片" title="图片名称" kk="显示自定义属性">
<script>
let oImg = document.querySelector("img");
console.log(oImg.src, oImg.alt, oImg.title);
// http://localhost:63342/%E7%BD%91%E9%A1%B5%E5%BC%80%E5%8F%91%E7%BB%83%E4%B9%A0/images/timg.jpg 无法显示图片 图片名称
console.log(oImg.kk); //undefined 无法显示自定义属性
console.log(oImg.getAttribute("alt")); //无法显示图片
console.log(oImg.getAttribute("kk")); //显示自定义属性
修改元素属性
语法:
元素对象名称.属性名称 = "新的值";
元素对象名称.setAttribute("属性名称","新的值") ;
let oImg = document.querySelector("img");
oImg.setAttribute("title","修改title名称");
新增元素属性
语法:
元素对象名称.setAttribute("属性名称","值") ;
注:setAttribute方法如果属性不存在则新增加,如果属性存在则修改
删除元素属性
语法:
元素对象名称.属性名称 = ""; 赋值空字符串 注:无法清空自定义属性
元素对象名称.removeAttribute("属性名称","新的值") ; 注:可以清空自定义属性
<img src="../images/timg.jpg" alt="无法显示图片" title="图片名称" kk="显示自定义属性">
<script>
let oImg = document.querySelector("img");
oImg.alt = "";
oImg.removeAttribute("title");
4.0 元素内容的操作
1.0 获取元素内容
let oDiv = document.querySelector("div");
oDiv.innerHTML | 获取的内容包含标签,获取的内容不会去掉两端的空格 |
oDiv.innerText | 获取的内容不包含标签,获取的内容会去掉两端的空格 |
oDiv.textContent | 获取的内容不包含标签,获取的内容不会去掉两端的空格 |
2.0 设置元素内容
oDiv.innerHTML = "想要设置的内容" | 新内容都会覆盖原有的内容,通过innerHTML设置数据,数据中包含标签时,会转换成标签之后再添加 | |
oDiv.innerText = "想要设置的内容" | 新内容都会覆盖原有的内容,通过innerText设置数据,数据中包含标签时,不会转换为标签,会当做一个字符串直接设置 | 在浏览器中存在兼容性问题
|
oDiv.textContent = "想要设置的内容" | 新内容都会覆盖原有的内容,通过textContent设置数据,数据中包含标签时,不会转换为标签,会当做一个字符串直接设置 |
3.0 设置元素样式
let oDiv = document.querySelector("div");
第一种方法
oDiv.className = "bodx"; 给标签设置class名称,引用CSS样式
第二种方法
oDiv.style.width = "300px";
oDiv.style.height = "300px";
oDiv.style.backgroundColor = "green";
注:过去CSS中通过 - 连接的样式,在JS中都是驼峰命名法.在通过JS添加的样式是内联样式,会覆盖掉同名的CSS样式
4.0 获取元素样式
let oDiv = document.querySelector("div");
方法一:
oDiv.style.width = "300px";
console.log(oDiv.style.width);
注:通过style属性只能获取到行内样式的属性值,不能获取到CSS设置的属性值
方法二:
let style = window.getComputedStyle(oDiv);
console.log(style.width);
注:要想获取到CSS设置的属性值,必须通过getComputedStyle方法来获取,getComputedStyle接收一个参数,这个参数就是要获取的元素对象,该方法返回一个对象,这个对象保存了CSS设置的样式和属性.
5.0 DOM事件
1.0 事件:用户和浏览器之间的交互行为,我们称之为事件,如:点击,移入,移出.
2.0 如何绑定事件
在JavaScript中所有的HTML标签都可以添加事件
元素.事件名称 = function(){};
当对应事件被触发时候就会自动执行function中的代码
注:如果给元素添加了和系统同名的事件,我们添加的事件不会覆盖系统添加的事件,若要覆盖,在函数末尾添加 return false;
<body>
<a href="https://www.baidu.com/">打开百度首页</a>
<script>
let oA = document.querySelector("a");
oA.onclick = function () {
alert("打开百度");
return false; //用我们添加的属性覆盖掉系统同名的事件
}
</script>
6.0 定时器
1.0 重复执行的计时器 setInterval() clearInterval();
<button id="start">开始</button>
<button id="end">结束</button>
<script>
let startButton = document.querySelector("#start");
let endButton = document.querySelector("#end");
let id = null;
startButton.onclick = function () {
id = setInterval(function () {
console.log("定义");
},1000)
}
endButton.onclick = function () {
clearInterval(id);
}
</script>
2.0 只执行一次的定时器 setTimeout() clearTimeout();
<button id="start">开始</button>
<button id="end">结束</button>
<script>
let startButton = document.querySelector("#start");
let endButton = document.querySelector("#end");
let id = null;
startButton.onclick = function () {
id = setTimeout(function () {
console.log("定义");
},5000)
};
endButton.onclick = function () {
clearTimeout(id);
};