Web Api

本文详细介绍了Web API,包括DOM的基本概念、DOM树、元素获取、事件基础、操作元素和节点、事件监听与处理、BOM对象以及浏览器存储等。内容涵盖了从获取元素、事件委托到本地存储的各种实用技巧和兼容性解决方案。
摘要由CSDN通过智能技术生成

Web Api

API

 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使用即可。
Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM )。
此处的 Web API 特指浏览器提供的一系列API(很多函数或对象方法),即操作网页的一系列工具。例如:操作html标签、操作页面地址的方法。

API 和 Web API 总结

1. API 是为我们程序员提供的一个接口,帮助我们实现某种功能,我们会使用就可以了,不必纠结内部如何实现
2. Web API 主要是针对于浏览器提供的接口,主要针对于浏览器做交互效果。
3. Web API 一般都有输入和输出(函数的传参和返回值),Web API 很多都是方法(函数)

DOM

什么是DOM

文档对象模型(Document Object Model,简称 DOM),是 W3C 组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。W3C 已经定义了一系列的 DOM 接口,通过这些 DOM 接口可以改变网页的内容、结构和样式。

DOM树

文档:一个页面就是一个文档,DOM 中使用 document 表示
元素:页面中的所有标签都是元素,DOM 中使用 element 表示
节点:网页中的所有内容都是节点(标签、属性、文本、注释等),DOM 中使用node表示
DOM 把以上内容都看做是对象

获取元素

如何获取元素
DOM主要用于操作元素,获取页面总的元素主要有以下几种方式

根据 ID 获取
根据标签名获取
通过 HTML5 新增的方法获取
特殊元素获取
根据id获取元素
使用 getElementById() 方法可以获取带有 ID 的**元素对象**。
document.getElementById('id');//直接写id名即可
根据标签名获取元素
使用 getElementsByTagName() 方法可以返回**带有指定标签名的对象的集合**。因为得到的是一个对象的集合,所以我们想要操作里面的元素就需要遍历。得到元素对象是动态的
document.getElementsByTagName('标签名');//写标签名如 div,span
通过 HTML5 新增的方法获取
document.getElementsByClassName('类名')// 根据类名返回元素对象集合
document.querySelector('选择器');  // 根据指定选择器返回第一个元素对象
document.querySelectorAll('选择器');     // 根据指定选择器返回
querySelector 和 querySelectorAll里面的选择器需要加符号,比如:document.querySelector('#nav');
获取特殊元素Body,Html
doucumnet.body  // 返回body元素对象
document.documentElement  // 返回html元素对象

事件基础

事件概述

	JavaScript 使我们有能力创建动态页面,而事件是可以被 JavaScript 侦测到的行为。简单理解: 触发--- 响应机制。
	网页中的每个元素都可以产生某些可以触发 JavaScript 的事件,例如,点击鼠标执行某个事件,滚动鼠标,按下键盘等等事件。

事件三要素

事件源,事件类型,事件处理程序	

执行事件的步骤

1、获取事件源(获取元素)
2、注册事件(绑定事件)
3、添加事件处理程序

在这里插入图片描述

操作元素

JavaScript 的 DOM 操作可以改变网页内容、结构和样式,我们可以利用 DOM 操作元素来改变元素里面的内容 、属性等。注意以下都是属性

改变元素内容

element.innerText=xxx
从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉
element.innerHtml=xxx
起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行

表单元素的属性操作

常见的表单元素属性:type、value、checked、selected、disabled

样式属性操作

我们可以通过 JS 修改元素的大小、颜色、位置等样式 
1. element.style     //行内样式操作
2. element.className //类名样式操作
1.JS 里面的样式采取驼峰命名法 比如 fontSize、 backgroundColor
2.JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高

自定式属性操作

获取属性值
element.getAttribute('属性');      // 获取标签行内属性值(字符串)
element.setAttribute('属性', '值'); // 设置标签行内属性值
element.removeAttribute('属性');    // 移除标签行内属性
<script>
        var div = document.querySelector('div');
        // 1. 获取元素的属性值
        // (1) element.属性
        console.log(div.id);
        //(2) element.getAttribute('属性')  get得到获取 attribute 属性的意思 我们程序员自己添加的属性我们称为自定义属性 index
        console.log(div.getAttribute('id'));
        console.log(div.getAttribute('index'));
        // 2. 设置元素属性值
        // (1) element.属性= '值'
        div.id = 'test';
        div.classN	ame = 'navs';
        // (2) element.setAttribute('属性', '值');  主要针对于自定义属性
        div.setAttribute('index', 2);
        div.setAttribute('class', 'footer'); // class 特殊  这里面写的就是class 不是className
        // 3 移除属性 removeAttribute(属性)    
        div.removeAttribute('index');
  </script>
上述三个方法用于获取任意的行内属性值,“element.属性”获取内置属性值。
H5自定义属性
<body>
    <div getTime="20" data-index="2" data-list-name="andy"></div>
    <script>
        var div = document.querySelector('div');
        // console.log(div.getTime);
        console.log(div.getAttribute('getTime'));
        div.setAttribute('data-time', 20);
        console.log(div.getAttribute('data-index'));
        console.log(div.getAttribute('data-list-name'));
        // h5新增的获取自定义属性的方法 它只能获取data-开头的
        // dataset 是一个集合里面存放了所有以data开头的自定义属性
        console.log(div.dataset);
        console.log(div.dataset.index);
        console.log(div.dataset['index']);
        // 如果自定义属性里面有多个-链接的单词,我们获取的时候采取 驼峰命名法
        console.log(div.dataset.listName);
        console.log(div.dataset['listName']);
    </script>
</body>

节点操作

	网页中的所有内容都是节点(标签、属性、文本、注释等),在DOM 中,节点使用 node 来表示。
	HTML DOM 树中的所有节点均可通过 JavaScript 进行访问,所有 HTML 元素(节点)均可被修改,也可以创建或删除。
	一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性
	元素节点  nodeType  为 1
	属性节点  nodeType  为 2
	文本节点  nodeType  为 3

获取元素节点

获取元素节点有两种方式

1、通过DOM方法获得元素节点

例如:document.getElementById(),document.querySelector()d等

2、利用节点层级关系获取元素节点
父级节点
node.parentNode //得到的是离元素最近的父级节点(亲爸爸) 如果找不到父节点就返回为 null
子级节点
 parentNode.childNodes
//parentNode.childNodes 返回包含指定节点的子节点的集合,该集合为即时更新的集合。
//注意:返回值里面包含了所有的子节点,包括元素节点,文本节点等。(包括空格换行)
parentNode.children  
//parentNode.children 是一个只读属性,返回所有的子元素节点。它只返回子元素节点,其余节点不返回 (这个是我们重点掌握的)
parentNode.firstChild
parentNode.lastChild  
//firstChild 返回第一个子节点,找不到则返回null。同样,也是包含所有的节点
//lastChild 返回最后子节点,找不到则返回null。同样,也是包含所有的节点
//这两个子节点是包括文本节点的(空格,换行)
parentNode.firstElementChild   
parentNode.lastElementChild 
//firstElementChild 返回第一个子元素节点,找不到则返回null
//lastElementChild 返回最后一个子元素节点,找不到则返回null
//这两个有兼容性,但是只返回子元素节点(不包括空格换行)
//实际开发中,firstChild 和 lastChild 包含其他节点,操作不方便,而 firstElementChild 和 lastElementChild 又有兼容性问题,那么我们如何获取第一个子元素节点或最后一个子元素节点呢?
//解决方案:
//如果想要第一个子元素节点,可以使用 parentNode.chilren[0] 
//如果想要最后一个子元素节点,可以使用 parentNode.chilren[parentNode.chilren.length - 1]

兄弟节点
node.nextSibling  
node.previousSibling 
//nextSibling 返回当前元素的下一个兄弟节点,找不到则返回null。同样,也是包含所有的节点
//previousSibling 返回当前元素上一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。
//这两个返回的包括文本节点
node.nextElementSibling  
node.previousElementSibling 
//nextElementSibling 返回当前元素下一个兄弟元素节点,找不到则返回null。
//previousElementSibling 返回当前元素上一个兄弟节点,找不到则返回null。
//这两个返回的是兄弟元素节点,但是有兼容性

解决兼容性,可以自己封装一段代码
function getNextElementSibling(element) {
   
      var el = element;
      while (el = el.nextSibling) {
   
        if (el.nodeType === 1) {
   
            return el;
        }
      }
      return null;
    }

创建节点

document.createElement('tagName')
//document.createElement() 方法创建由 tagName 指定的 HTML 元素。因为这些元素原先不存在,是根据我们的需求动态生成的,所以我们也称为动态创建元素节点。绑定事件时需要事件委托

添加节点

node.appendChild(child) //node 父级  child 是子级 后面追加元素  类似于数组中的push
node.appendChild() 方法将一个节点添加到指定父节点的子节点列表末尾。类似于 CSS 里面的 after 伪元素。
node.insertBefore(child) 
node.insertBefore() 方法将一个节点添加到指定父节点的子节点列表前面。类似于 CSS 里面的 before 伪元素。

我们想要页面添加一个新的元素 : 1. 创建元素 2. 添加元素

删除节点

node.removeChild(child)
node.removeChild() 方法从 DOM 中删除一个子节点,返回删除的节点。

复制节点

node.cloneNode() //node.cloneNode() 方法返回调用该方法的节点的一个副本。
注意:
1. 如果括号参数为空或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。
2. 如果括号参数为 true ,则是深度拷贝,会复制节点本身以及里面所有的子节点。

替换节点

parentNode.replaceChild(newChild, oldChild);
用指定的节点替换当前节点的一个子节点,并返回被替换掉的节点。

创建节点总结

document.write()
innerHTML
document.createElement()
1. document.write 是直接将内容写入页面的内容流,会导致页面全部重绘
2. innerHTML 是将内容写入某个 DOM 节点,不会导致页面全部重绘
3. innerHTML 复制节点的时候,不会复制原先节点的事件,会存在内存泄露问题
4. 如果页面创建元素很多,建议使用 innerHTML 因其效率更高(不要拼接字符串,采取数组形式拼接)
5. 如果页面创建元素较少,建议使用 createElement()
总结:不同浏览器下,innerHTML 效率要比 creatElement 高

DOM操作总结

关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作

创建

document.write()
innerHtml
document.createlecment()

appenchild()
insertbefore

removechild()	

主要修改dom的元素属性,元素内容,表单值等

修改元素属性:src,title,href
修改表单属性:value,type,disabled,checked
修改元素内容:innerhtml,innertext
修改元素样式:style,ClassName

DOM提供的API:getelementbyid,getelementbytagname,getelementbyclassname
H5新增方法:querySelector,querySelectorAll
利用节点操作:parentnode(父级),children(子级),nextelementsibling,previouselementsibling

属性操作

主要针对自定义属性

setattribute:设置属性值
getattribute:获取属性值
removeattribute:移除属性

事件

注册事件

给元素添加事件,称为注册事件或者绑定事件。
注册事件有两种方式:传统方式和方法监听注册方式
传统注册方式
利用 on 开头的事件 onclick 
<button onclick="alert('hi~')"></button>

	btn.onclick = function() {
   
				alert('hi~')} 

特点: 注册事件的唯一性
同一个元素同一个事件只能设置一个处理函数,最后注册的处理函数将会覆盖前面注册的处理函数
监听注册方式
w3c 标准 推荐方式
addEventListener() 它是一个方法
IE9 之前的 IE
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值