DOM

DOM

JS的组成

ECMAScript js的基础语法

DOM 文档对象模型

BOM 浏览器对象模型

DOM

Document Object Model(文档对象模型)

学习DOM就是学习封装好的操作页面的API(应用程序接口),Application programming interface 就是一些封装好的方法

DOM:文档对象模型(Document Object Model),又称为文档树模型。是一套操作HTML和XML文档的API

DOM是由哪些部分组成的?

首先是由节点组成的,节点又分以下几部分:

元素 属性 文本 注释

1、获得页面元素的方式

  • document.getElementById() 通过标签的Id获得的是唯一的页面标签对象

var li2 = document.getElementById("li2"); //通过id的方式获得页面中的标签,是唯一的一个对象

  • document.getElementsByTagName() 通过标签(元素)名

var lis = document.getElementsByTagName("li"); // 通过标签的方式获得所有的li元素,是一个标签对象的数组

  • document.getElementsByClassName() 通过标签的类名:在JS中不推荐使用这种方式,因为有兼容性的问题

var divs = document.getElementsByClassName("box"); // 通过类名的方式获得的也是标签对象的数组

  • H5的获取元素节点: document.querySelector("")
  • H5的获取元素节点: document.querySelectorAll("")

注意:DOM对象的属性和标签的属性几乎是一模一样的,用DOM的方法获得的标签对象就是DOM对象

2、获取元素后的一些操作

获取元素内的内容

  • textContent

  • innerHTML

区别:textContent与innerHTML方法类似会返回对象节点下所有的文本内容,但是textContent返回的内容只有去HTML化的文本节点的内容

设置内容

  • textContent

  • innerHTML

innerHTML会直接渲染成对应的HTML标签

标签的属性操作

  • 获取属性值(可以获的自定义属性的值):dom.getAttribute(name)
  • 设置属性值(可以获的自定义属性的值):dom.setAttribute(name, value)
  • 移除属性值:dom.removeAttribute(name)
  • 特列:获取class的值 dom.className , 设置则可以赋值设置,返回的是个字符串
  • 特列:获取class的值 dom.classList.add() | remove() , 添加或者删除,返回的是一个类名数组

js设置样式

  • 通过js动态添加类名从而达到更改样式

  • 通过dom.style属性获取样式 或者设置样式

    dom.style.width = "100px"
    dom.style.heigth = "100px"
    dom.style.color = "red"
    dom.style.border = "1px solid red"
    dom.style.backgroundColor = "yellow"
    

3. 节点

DOM是由节点组成的 节点:标签,文本,学习节点的目的,是为了让我们对DOM操作更加的灵活一些。

节点获取:

  • dom.parentNode: 获取dom节点的父节点
  • dom.children: 获取dom节点的子节点,是一个数组
  • dom.nextElementSibling : 获取dom的下一个元素节点
  • dom.nextSibling :获取dom的下一个节点(包括元素节点)
  • dom.previousSibling
  • dom.previousElementSibling 同上

节点的创建和插入:

  • document.createElement()

    <script>
        var box = document.getElementById("box");
        var ul = document.createElement("ul"); // 创建的是一对标签
        box.appendChild(ul);// 将创建出来的ul标签追加到box中
        var  li = document.createElement("li"); // 创建的一个标签对象
        ul.appendChild(li);
        li.innerHTML = "这是新添加的内容";
    </script>
    
  • cloneNode

  • appendChild

//var li11 = dom.cloneNode(false); // 如果参数是false的话,表示浅度克隆,只克隆标签,不会克隆标签之间的内容
var li11 = li1.cloneNode(true);// 如果参数为true的话,表示 深度克隆,会克隆标签内的一切内容
// var li11 = li1.cloneNode();// 如果不写参数的话,与false一致
//  console.log(li11);

// 可以将克隆出来的内容追加到任何一个节点上
// appendChild
ul.appendChild(li11);  // 在当前父级元素的最后,追加一个克隆出来的标签节点
console.log(ul);
  • m.insertBefore(k,n) 在m元素的k节点前添加n节点

删除节点

  • m.removeChild(n)删除m元素中的n节点

4、事件

JavaScript是一种事件驱动的语言,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间。分为触发和响应

  • 触发:交互的某个瞬间
  • 响应:就是要执行的某些代码要达到一定的效果

事件三要素

事件源 要给谁注册事件

事件类型 要给事件源注册什么样的事件

事件处理程序 要执行的代码,去达到某种效果 函数或是匿名函数

注册事件

  • On的方式注册事件
  • addEventListener()

移除事件

dom.removeEventListener(type,listener) 高级浏览器支持的方式

事件冒泡

事件冒泡: 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。

image.png

事件委托

本来要自己做的事,可以委托其它的标签去做,这种方式叫做事件委托

比来要给li注册的事件,现在只需要注册到ul即可,通过事件冒泡的方式,也可以达到相应的效果。

阻止事件冒泡

取消冒泡和捕获: stopPropagation() 取消冒泡和捕获

事件捕获 刚好和事件委托相反

是从DOM的最外层到目标对象执行触发

而冒泡是从当前对象往DOM的最顶级元素去执行触发

image.png

事件的三个阶段

image.png

事件对象event

任何事件触发的时候,程序都会提供给我们一个事件对象event

存储着一些与事件相关的信息

也是有兼容生的,高级浏览器是支持的,但是IE8及以下的浏览器的是支持的window.event

Var e = event || window.event;

三个坐标

event.clientX/Y 可视区,以浏览器可视区的左上角为基准

event.pageX/Y 以页面的左上角为基准

event.screenX/Y 以电脑屏幕的左上角为基准

pageX/Y是有兼容性的,

event.pageX/Y = event.clientX/Y+event.scrollTop/Left

DOM事件的Event对象的常见应用:

  • event.preventDefault() : 阻止默认事件
  • event.stopPropagation(): 阻止冒泡
  • event.stopImmediatePropagation(): 除了该事件的冒泡行为被阻止之外(event.stopPropagation方法的作用),该元素绑定的后序相同类型事件的监听函数的执行也将被阻止.
  • event.target: 返回触发事件的元素
  • event.currentTarget: 返回绑定事件的元素

DOM 的事件级别

DOM事件级别.png

DOM1也是存在,只是没有涉及到事件,DOM3比DOM2多了键盘和鼠标一些事件

DOM的自定义事件:

var  eve = new Event('eventName')
dom.addEventListener('eventName',function(){
})  //注册事件
dom.dispatchEvent(eve);   // 触发事件,
---------------------------------------------------------
这个事件不能添加参数,想要添加参数,得自定义 CustomEvent事件
// 添加一个适当的事件监听器
obj.addEventListener("cat", function(e) { process(e.detail) })
// 创建并分发事件
var event = new CustomEvent("cat", {"detail":{"hazcheeseburger":true}})
obj.dispatchEvent(event)

其他事件类型:

Onmouseover 鼠标移入的事件

Onmouseout 鼠标离开的事件

Onfocus 获得焦点的事件

Onblur 失去焦点的事件

Ondblclick 鼠标的双击事件

移动端的事件

click事件

单击事件,类似于PC端的click,但在移动端中,连续click的触发有200ms ~ 300ms的延迟

touch类事件

触摸事件,有touchstart touchmove touchend touchcancel 四种之分

touchstart:手指触摸到屏幕会触发

touchmove:当手指在屏幕上移动时,会触发

touchend:当手指离开屏幕时,会触发

touchcancel:可由系统进行的触发,比如手指触摸屏幕的时候,突然alert了一下,或者系统中其他打断了touch的行为,则可以触发该事件

tap类事件

触碰事件,我目前还不知道它和touch的区别,一般用于代替click事件,有tap longTap singleTap doubleTap四种之分

tap: 手指碰一下屏幕会触发

longTap: 手指长按屏幕会触发

singleTap: 手指碰一下屏幕会触发

doubleTap: 手指双击屏幕会触发

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352