JS Web API

API的概念

API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使用即可。

Web APIs的概念

Web API是浏览器提供的一套操作浏览器功能和页面元素的API(BOM 和 DOM)

API和Web API总结

  1. API是为程序员提供的一个接口,帮助我们实现某种功能。
  2. Web API 主要针对浏览器提供的接口,主要针对浏览器做交互效果。
  3. Web API一般都有输入和输出(函数的传参和返回值),WebAPI很多都是方法(函数)
  4. 学习API可以结合前面学习内置对象方法的思路学习

DOM介绍

文档对象模型(Document Object Model,简称DOM),是处理可扩展标记语言的标准编程接口。

DOM树

 DOM数 又称为文档数模型,把文档映射成树形结构,通过节点对象对其处理,处理的结果可以加入到当前的页面。

  • 文档:一个页面就是一个文档,DOM中使用document表示
  • 节点:网页中的所用内容,在文档树中都是节点(标签、属性、文本、注释等),使用node表示
  • 标签节点:网页中的所有标签,通常成为元素节点,又简称为“元素”,使用element表示

获取元素

根据ID获取

语法:docuemnt.getElementById(“id”)
作用:根据ID获取元素对象
参数id值,区分大小写的字符串
返回值:元素对象 或 null

<div id=one></div>
    <script>
        var one = document.getElementById("one");
        one.style.backgroundColor="red"
        one.style.width="100px"
        one.style.height="100px"
    </script>

根据标签名获取元素

语法:document.getElementsByTagName(“标签名”)

作用:根据标签名获取元素对象

参数:标签名

返回值:元素对象集合(伪数组,数组元素是元素对象)

<div></div>
    <div></div>
    <div></div>
    <script>
        var one = document.getElementsByTagName("div");
        //控制台查看返回数组
        console.log(one)
        //循环输出
        for(var i = 0; i<one.length; i++ ){
          one[i].style.width='100px';
          one[i].style.height="100px"
          one[i].style.backgroundColor="red"
        }

H5新增获取元素方式

  1. document.getElementsByClassName(“类名”)//根据类名返回数组对象集合
<div class="one"></div>
    <div class="one"></div>
    <div class="one"></div>
    <script>
        var one = document.getElementsByClassName("one")
        console.log(one)
    </script>
  1. document.querySelector(“选择器”)//根据指定选择器返回第一个元素对象
<div class="one"></div>
    <div class="one"></div>
    <div class="one"></div>
    <script>
        var one = document.querySelector(".one")
        console.log(one)
    </script>
  1. document.querySelectorAll(“选择器”)//根据指定选择器返回
<div class="one"></div>
    <div class="one"></div>
    <div class="one"></div>
    <script>
        var one = document.querySelectorAll(".one")
        console.log(one)
    </script>

获取特殊元素(body,html)

获取body元素

document.body

document.body.style.backgroundColor="red"

获取html元素

document.documentElement

document.documentElement.style.color="red"

事件基础

事件三要素

  • 事件源(谁):触发时间的元素
  • 事件类型(什么事件):例如click点击事件
  • 事件处理程序(做什么):事件触发后要执行的代码
<button>点击事件</button>
<script>
    var btn = document.querySelector("button")
    btn.onclick = function(){
        alert("我在这")
    }
</script>

常见的鼠标事件

事件

说明

onClick

鼠标点击事件,多用在某个对象控制的范围内的鼠标点击

onfocus

获得鼠标焦点

onblur

失去鼠标焦点

onMouseOut

当鼠标离开某对象范围时触发的事件

onDblClick

鼠标双击事件

onMouseDown

鼠标上的按钮被按下了

onMouseUp

鼠标按下后,松开时激发的事件

onMouseOver

当鼠标移动到某对象范围的上方时触发的事件

onMouseMove

鼠标移动时触发的事件

键盘事件

事件

说明

onkeydown

按下键盘时运行脚本

onkeypress

按下并松开时运行脚本

onkeyup

事件会在键盘按键被松开时发生

操作元素

改变元素内容

element.innerText

从起始位置到终止位置的内容,但去除html标签

<button>点击事件</button>
<script>
    var btn = document.querySelector("button")
    btn.onclick = function(){
        btn.innerText="<strong>我变粗了</strong>"
    }

element.innerHTML

从起始到终止位置的全部内容,包括html标签
<button>点击事件</button>
<script>
    var btn = document.querySelector("button")
    btn.onclick = function(){
        btn.innerHTML="<strong>我变粗了</strong>"
    }

区别

  • 获取内容时
  • innerText会去除空格和换行,innerHTML会保存
  • 设置内容时的区别
  • innerText不识别HTML,innerHTML会识别

案例:点击获取当前时间

<button>点击</button>
<div>显示时间</div>
<script>
    var btn = document.querySelector("button")
    var time = document.querySelector("div")
    btn.onclick = function(){
        time.innerHTML= getDate();
    }
    function getDate(){
        var date= new Date();
        var year = date.getFullYear();
        var month  = date.getMonth()+1;
        var dates = date.getDate();
        var day = date.getDate();
        var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
        return `今天是:${year} 年 ${month} 月 ${dates} 日 ${arr[day]}`
    }
</script>

常用的元素的属性操作

  1. inneText、innerHTML
  2. src‘、href
  3. id、alt、title

表单属性操作

type、value、checked、selected、disabled

获取元素的值

元素对象.属性名

设置属性的值

元素对象.属性名 = 值

表单元素中有一些属性如disabled、checked、selected,元素对象的这些属性的值是布尔型

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        table {
            border-collapse: collapse;
            width: 800px;
        }
        th,
        td {
            border: 1px solid #000;
            padding: 15px;
            /* width: 100px; */
            text-align: center;
        }

        .active {
            background: rgb(240, 111, 111);
        }
    </style>
</head>

<body>
    <table>
        <thead>
            <tr>
                <th><input id='all' type="checkbox"></th>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><input class='cbox' type="checkbox"></td>
                <td>1</td>
                <td>小明</td>
                <td>18</td>
            </tr>
            <tr>
                <td><input class='cbox' type="checkbox"></td>
                <td>2</td>
                <td>小明</td>
                <td>18</td>
            </tr>
            <tr>
                <td><input class='cbox' type="checkbox"></td>
                <td>3</td>
                <td>小明</td>
                <td>18</td>
            </tr>
        </tbody>
    </table>
</body>
<script>
    var trs = document.querySelectorAll('tbody tr');
    var all = document.querySelector("#all")
    var cbox = document.getElementsByClassName("cbox")
    // 全选
    all.onclick = function () {
        for (var i = 0; i < cbox.length; i++) {
            cbox[i].checked = this.checked;
        }
    }
    //反选

    for(var  i = 0; i < trs.length; i++){
        trs[i].onclick= function(){
            var flag = 1;
            for(var i = 0; i<trs.length; i++){
                if(!cbox[i].checked){
                    flag = 0;
                    break
                }
            }
            all.checked=flag
        }
    }
    //悬浮背景
    for (var j = 0; j< trs.length; j++) {
        trs[j].onmouseover = function () {
            this.className = 'active'
        }
        trs[j].onmouseout = function () {
            this.className = ''
        }
    }
    // for (var i = 0; i < trs.length; i++) {
    

    //     if (i % 2 == 0) {
    //         trs[i].style.background = ' yellow'
    //     } else {
    //         trs[i].style.background = 'purple'
    //     }

    // }  
</script>

</html>

样式属性操作

element.style 行内样式操作

element.className 类名样式操作

自定义属性操作

  • element.属性 获取内置属性值
    element.getAttribute(‘属性’) 获取自定义的属性值
<body>
    <div id="demo" index="1" class="nav"></div>
</body>
<script>
    var div = document.querySelector("div")
    console.log(div.id)
    console.log(div.getAttribute('id'))
    console.log(div.getAttribute('index'))
</script>

设置属性值

  • element.属性 = ‘值’ 设置内置属性值
  • element.setAttribute(‘属性’,‘值’)
var div = document.querySelector("div")
    div.setAttribute('class','hello')
    div.setAttribute('index',2)

移出属性

  • element.removeAttribute(‘属性’)
div.removeAttribute('index')

计数器案例

<script>
    var btn = document.querySelector("button");
    var flag = 0
    btn.onclick = function () {
        if (flag == 0) {
            document.body.style.background = '#000'
            flag = 1
        } else if (flag == 1) {
            document.body.style.background = '#fff'
            flag = 0
        }
    }
</script>

全选与反选案例

<script>
    var all = document.querySelector('.all');
    var box = document.querySelectorAll('tbody input');
    //全选
    all.onclick = function(){
        //设置点击事件
        for(var i = 0; i < box.length; i++){
            box[i].checked = this.checked
            //循环,为每一个 input 设置选中属性
        }
    }
    
    
    //反选
    for(var i = 0; i < box.length; i++){
        //循环出所有的 input 标签
        box[i].onclick = function(){
            //设置点击事件,当点击一个 input 时 判断其他 input 标签状态
            var flag = 1;
            //设置旗帜变量,如果为 1 则反选 
            for(var i = 0; i < box.length; i++){
                if(!box[i].checked){
                    //如果 tbody 中的 input 有一个没有被选中,执行判断语句
                   flag = 0;
                    break;
                }
            }
            all.checked=flag    //结果
        }
    }
</script>

nav案例

<script>
    var lis = document.querySelectorAll('li');
    //获取全部 li 标签
    var divs = document.querySelectorAll('div');
    //获取全部 div 标签
    for (var i = 0; i < lis.length; i++) {
        //循环 li 标签
        lis[i].setAttribute('index', i);
        //为每一个 li 标签设置 index 属性
        lis[i].onclick = function () {
            //设置点击事件
            for (var i = 0; i < lis.length; i++) {
                //清除所有样式
                lis[i].className = ''
            }
            this.className = 'active';
            //设置点击样式
            
            
            var index = this.getAttribute('index');
            //获取 index 属性
            for(var i  = 0; i<divs.length; i++){
                //循环 div 标签
                divs[i].style.display = 'none';
                //设置所有 div 隐藏
            }
            divs[index].style.display = 'block';
            //设置索引值为 index 的 div 的样式为 显示
        }
    }
</script>