如鹏网学习笔记(十)DOM
DOM笔记
一、DOM简介
Document Object Model 文档对象模型
DOM的节点树模型:整个文档按照从大到小的节点划分,每一个内容都算作一个节点
DOM API 编程接口 可以用来操作页面的任意一部分内容
js+DOM编程的思想:由js基本语法控制程序的执行逻辑,由DOM API进行元素的查找获取,进而再对元素进行增删改等操作
学习DOM,除开学习设计思想外,更多的是学习DOM API的用法
二、document对象
document对象,
是Windows对象的一个属性,
表示整个HTML页面,是DOM的核心对象,
是连接JavaScript和DOM的桥梁,使得我们可以在JavaScript环境中操作页面内容,
提供了查找获取元素节点的方法,所以document是DOM的编程入口,
此外还提供了创建新节点的方法
三、document对象获取对象的方法
1,getElementById(String) 返回 Element 根据元素的id属性值获取元素
2,getElementsByTagName(String) 返回 NodeList数组 根据元素的标签名获取元素
3,getElementsByName(String) 返回 NodeList数组 根据元素的name属性值获取元素
nodeList.length 包含的元素个数
nodeList.item(index) 获取指定索引位置的元素
注意:NodeList是动态更新的,即如果删除的元素也在NodeList里面,那么也同时从NodeList里面删除
四、document创建新元素的方法
document.creatElement(tagName) 根据元素标签名称创建元素节点
五、document添加新元素的方法
1,先创建要添加的元素
var element = document.createElement(tagName)
2,获取要添加元素的节点
var element = document.getElementById(String)
3,使用元素的方法appendChild(node)方法进行添加
六、Element操作元素的属性
有两种方式操作元素的属性
1,直接使用element.属性名 :
var 变量名 = element.属性名;//获取属性值
element.属性名 = 属性值; //给属性赋值
注意:
a,因为class是关键字,所以操作class属性时使用className代替
b,这种方式只能操作HTML标准规定的属性,不能操作自定义属性
c,在js中,操作checkbox、radio的checked属性,select的selected属性值时,使用true或FALSE,表单元素的disable属性也是如此
2,另外三种操作属性,且可操作自定义属性
a,var 变量名 = getAttribute("属性名"); 获取属性值
b,removeAttribute("属性名"); 删除指定属性,没有返回值
c,setAttribute("属性名",“新属性值”); 修改/添加属性
七、Element操作元素的子节点
子节点包括子元素和元素文本内容
element.getElementsByTagName() 根据子元素的标签名获取其内部的子元素
element.innerHTML("要写入的HTML语句"); 以字符串的形式在该子节点内部插入HTML语句
element.insertBefore(newNode,node); 在子节点内部,在指定子节点前插入新子节点
element.appendChild(newNode); 在最后追加子节点
element.removeChild(); 删除指定的子节点
八、操作样式属性
两种方式:
1, element.style CSSStyleDeclaration类型的对象
使用 element.style.属性名 的方式可以直接操作某个样式属性。
如:element.style.backgroundColor="gray";
注意:CSS中样式属性使用“-”连接两个单词,js中使用后面的单词首字母大写的方式连接!!
2, element.className = "另一个className"; 效果:空字符串可以实现删除,可以实现指向另一个类,病通过CSS控制效果的切换
九、DOM事件机制
当浏览器状态改变、用户操作时都会出发一些事件。如:点击了一个按钮,出发了按钮点击的时间,按钮称为事件源
当一个时间被触发时,浏览器就会创建一个event事件对象,这个时间对象包含和此时间相关的 各种信息,如点击时间的时间对象包含点击文字的信息,可供编程者使用
如果希望当一个时间发生时针对这个时间做一些处理,就可以给该时间注册一个事件处理函数,时间触发时,该函数会被调用
常见的事件有以下几类:
1,窗体事件
页面加载完成事件
load 页面加载完成时触发(window对象为事件源)
<script type="text/javascript">
window.onload=function(){
//只有页面加载完成,才可确保id为div01的元素被获取到
var element = document.getElementById("div01");
alert(element);
}
</script>
注意:load是事件的名称,onload是元素的属性,用来给元素注册事件处理函数
2,鼠标事件
1,
onclick、ondblclick 鼠标单击、双击时触发
示例代码:
<script type="text/javascript">
window.onload=function(){
getElementById("div01").onclick=function(){
alert("点到我了");
}
getElementById("div02").ondblclick=function(){
alert("双击到了");
}
}
</script>
onmouseover、onmouseout 鼠标指针经过或者移出元素时触发的事件
onmousemove 鼠标指针移动时触发(进入元素后)
onmousedown、onmouseup 鼠标按键按下、弹起时触发(进入元素后)
2,鼠标事件的event对象包含如下信息:
button 点击的那个鼠标按键(0、1、2)
altKey、ctrlKey、shiftKey 点击时是否同时按下键盘的alt、ctrl、或者shift按键
clientX、clientY 鼠标指针的窗口坐标
screenX、screenY 鼠标指针的屏幕坐标
示例代码:
<script type="javascript">
window.onload=function(){
getElementById("div01").onmousedown=function(){
alert(event.button);//打印出当前事件中鼠标按下的是哪一个按键
alert(event.altKey+event.ctrlKey+event.shiftKey);//打印出当前事件中鼠标按下时是否按了相应的按键
}
}
</script>
3,键盘事件
4,焦点事件
5,页面加载完成事件
onload 页面加载完成时触发(window对象为事件源)
示例代码:
<script type="text/javascript">
window.onload=function(){
var element = document.getElementById("div01");
alert(element);
}
</script>
处理事件的两种方式
1,通过DOM方式把时间处理函数赋值给事件属性(称为注册事件处理函数)
示例代码:
<script type="text/javascript">
window.onload=function(){
document.getElementById("div01").onclick=function(){
alert("这是注册事件处理函数的方式");
}
}
</script>
2,直接在HTML元素标签的事件属性上写要执行的代码
示例代码:
<div onclick="alert('这是直接在元素标签的事件属性上写执行方法的方式');"></div>
第一种处理方式的优先级大于第二种!!!!!
注意:
如果有个自定义函数fun1,
按照第一种方式的写法为 element.onclick=fun1;//注意是将fun1这个函数的对象(不能带括号),赋值给onclick
按照第二种方式的写法为 onclick=fun1();//在元素的标签里写上函数的调用
十、this的用法
示例代码:
<script type="javascript">
function(){
alert(this);
}
window.onload=function(){
var obj = {"fun1",fun1};
var btn = document.getElementById("btn");
btn.onclick=fun1;
window.fun1();//打印出window对象
obj.fun1();//打印出Object对象
btn.onclick();//打印出button对象
}
</script>
总结:如果this在函数fun1内,函数fun1以哪个对象的属性值的身份去执行,this就表示哪个对象
其他情况如果不容易判断的话就实际测试一下:
示例代码:
<input type="button" onclick="alert(this)"/>//打印出button对象
<input type="button" onclick="fun1()"/>//打印出window对象
十一、给一个事件注册多个事件处理函数
1,注册事件处理函数的方式会覆盖直接编写处理代码的方式,而且同时注册的多个处理函数也会发生覆盖,
这就导致一个事件发生时我们只能做“一件事情”
2,为了可以给一个事件注册多个事件处理函数,DOM提供了另外一种注册方式:
addEventListener("事件名称",处理函数);
示例代码:
<script type="javascript">
div.addEventListener("click",function(){
alert("第三种处理函数方式")
});
</script>
特点:不会发生覆盖,可以同时注册相同的事件
注意:多次注册同一个函数,效果只有一次
3,删除一个处理函数
如果希望将来可以删除某个注册的处理函数,就应该拿到该处理函数的引用。
removeEventListener(事件名称, 处理函数);
示例代码:
<script type="javascript">
var fun1=function(){
alert("第三种处理函数方式");
};
div.removeEventListener("click",fun1});
</script>
十二、事件冒泡
1,由于HTML元素可以嵌套,就不可避免的出现当用户执行一个动作,如点击时,会有多个元素触发点击事件。
为了方便管理,不至于混乱,DOM提供了事件冒泡机制。
事件冒泡:当若干嵌套的元素“同时”被触发某个事件时,最内层元素的事件最先被触发,事件依次向外传递。
示例代码:
<script type="javascript">
window.onload=function(){
var div01 = document.getElementById("div01");
var div02 = document.getElementById("div02");
var div03 = document.getElementById("div03");
div01.onclick=function(){
alert("div01");
}
div02.onclick=function(){
alert("div02");
}
div03.onclick=function(){
alert("div03");
div03.stopProgagation();//取消事件冒泡
}
//当点击最里面的div03时,外层的div02和div01都会触发事件,这就是事件冒泡
}
</script>
2,如果某刻希望取消该事件的冒泡,可以使用event.stopProgagation();
十三、键盘事件
keydown 键盘按键被按下
keyup 键盘按键被弹起
event事件对象的属性:
event.keyCode 被按下的按键的整数编码
十四、取消某些事件的浏览器默认动作
对于某些元素的特点事件,浏览器会有一个默认的动作,如超链接触发点击事件时页面会跳转、表单提交事件被触发时变淡数据会被提交到服务器、键盘按下在输入框输入字符等
DOM提供了两种方式来取消浏览器的默认动作:
1,在我们自己注册的处理函数中执行event.preventDefault();
2,return false;
注意:取消事件的浏览器默认动作和取消事件冒泡是不同的概念
十五、焦点事件
focus 元素获得焦点
blur 元素失去焦点
十六、表单事件
select input(text)、textarea里的文本被选中时触发
change input(text)、textarea的值改变时触发
submit 表单提交时触发(真正把数据提交到服务器前触发)
十七、获得一个元素的坐标的写法
<script type="javascript">
var x = div02.offsetLeft;
var y = div02.offsetTop;
var parent = div02.offsetParent;
while(parent){
x += parent.offsetLeft;
y += parent.offsetTop;
parent parent.offsetParent;
}
</script>
如鹏网学习笔记(十)DOM的更多相关文章
- 如鹏网学习笔记(十五)ASP.NET MVC核心基础笔记
一.ASP.Net MVC简介 1,什么是ASP.NET MVC? HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大.工作量大.因此提供了ASP. ...
- 如鹏网学习笔记(七)HTML基础
HTML笔记 一.HTML简介 1,HTML (Hyper Text Mark-up Language) 超文本标记语言,是一种编程语言,也可以说是一种标准.规范. 2,HTML提供了一系列标记(标签 ...
- 如鹏网学习笔记(四).Net常用类库
.Net常用类库 一.String成员方法(常用) 1,bool Contains(string str) 判断字符串对象是否包含给定的内容 2,bool StartsWith(String str) ...
- 如鹏网学习笔记(十四)ASP.NET
Asp.net笔记 一.Socket类 进行网络编程的类,可以在两台计算机之间进行网络通讯 过程: 向服务器发送指令: GET /index.html HTTP/1.1 Host:127.0.0.1: ...
- 如鹏网学习笔记(十二)HTML5
一.HTML5简介 HTML5是HTML语言第五次修改产生的新的HTML语言版本 改进主要包括: 增加新的HTML标签或者属性.新的CSS样式属性.新的JavaScript API等.同时删除了一些过 ...
- 如鹏网学习笔记(九)JavaScript
JavaScript笔记 一.JavaScript简介 1,JavaScript是一种计算机编程语言,可以像等其他编程语言那样定义变量,执行循环等. 2,JavaScript代码主要执行在浏览器上,为 ...
- 如鹏网学习笔记(十三)EasyUI
一.EasyUI简介 是一组基于JQuery的UI插件集合 主要作用:为JQuery对象提供新的方法,实现新的功能 可以快速创建出简洁.友好.美观的页面,非常适合做网站后台管理页面(不够漂亮,不适合做 ...
- 如鹏网学习笔记(十一)JQuery
一.jQuery简介 jQuery是一个JavaScript库,特性丰富,包含若干对象和很多函数,可以替代传统DOM编程的操作方式和操作风格 jQuery通过对DOM API.DOM事件的封装,提供了 ...
- 如鹏网学习笔记(五)MySql基础
MySQL基础 一.数据库概念 1,网友装备信息.论坛帖子信息.QQ好友关系信息.学籍管理系统中的学生信息等都要“持久化”的保存到一个地方, 如果通过IO写到文件中,那么会非常麻烦,而且不利于多人共享 ...
随机推荐
- DOS文件操作命令
内部命令 COPY---文件固执命令 格式:COPY [源盘:][路径]<源文件名> [目标盘][路径]<目标文件名> 拷贝一个或多个文件到指定盘上 1)COPY是文件对文件的 ...
- 如何给LOJ补全special judge
首先你要会写一个叫$data.yml$的东西, 这里面记录了这道题的$subtask$计分策略 也告诉了评测姬这道题是提交答案还是$spj$还是交互题 那么,$YAML$语言是啥啊? 别问我,我也不会 ...
- Prufer codes与Generalized Cayley's Formula学习笔记
\(Prufer\)序列 在一棵\(n\)个点带标号无根树里,我们定义这棵树的\(Prufer\)序列为执行以下操作后得到的序列 1.若当前树中只剩下两个节点,退出,否则执行\(2\) 2.令\(u\ ...
- 护网杯圆满结束,还不满足?不如来看看大佬的WP扩展思路~
护网杯预选赛 WP转载自:https://qingchenldl.github.io/2018/10/13/%E6%8A%A4%E7%BD%91%E6%9D%AFWP-BitPwn/#more WEB ...
- Learn to See in the Dark(论文阅读笔记)
最近做项目看了一篇论文<Learn to See in the Dark>下面是一些论文笔记 概括: 这篇论文主要介绍的是在低光照的环境下用两个标准的FCN网络,通过控制变量法来对比不同的 ...
- Docker实战:更轻松、更愉快、更高效
编者按:借助Docker,我们可以更容易地进行web应用部署,而同时不必头疼于项目依赖.环境变量以及各种配置问题,Docker可以快捷.高效地处理好这一切.而这也是本教程所要实现的主要目的.以下是作者 ...
- 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧拿出来拍啊
花10天时间用C语言做了个小站 http://tieba.yunxunmi.com/index.html 简称: 云贴吧 不好意思啊,我上周到今天不到10天时间,用纯C语言写了一个小站!想拍砖的就赶紧 ...
- [Xamarin] 產生專案的AndroidManifest.xml (转帖)
紀錄一下 Xamarin 如何開啟 AndroidManifest.xml,因為這跟權限有關係,每個Android App幾乎都要設定 每次都想Add File 去增加但是其實是不對的 工具上面不管是 ...
- 关于.NET中FileSystemWatcher的一些不被人注意的细节
.NET 中的FileSystemWatcher可以监控文件系统中的更改.新建.删除和重命名,关于它的事件及属性的讨论有许多,但细节性的具体在什么情况下触发这些事件讨论不多.根据个人测试,总结如下: ...
- net与树莓派的情缘-安装SVN(三)
sudo apt-get install subversion cd /home/pi mkdir svn svnadmin create /home/pi/svn/Project cd /home/ ...