Lesson5:JavaScript(WebAPI)

目录

一、WebAPI背景知识

二、DOM基本概念

2.1 DOM

2.2 DOM树

三、获取元素

3.1 querySelector

3.2 querySelectorAll

 3.3 补充

四、事件

4.1 事件概念

4.2 事件三要素

4.3 举个例子:点击事件

五、操作元素

5.1 获取/修改元素内容

5.1.1 innerText

5.1.2 innerHTML

5.2 获取/修改元素属性

5.3 获取修改表单(input标签)元素属性

练习1:密码和文本切换

练习2:点击计数

5.4 获取修改样式属性

5.4.1 行内样式操作

5.4.2 类名样式操作

六、操作节点

6.1 新增节点

6.1.1 创建元素节点(createElement)

6.1.2 插入节点到dom树中

①使用appendChild将节点插入到指定节点的最后一个孩子的后面

②使用insertBefore将节点插入到指定节点之前

 注意:如果针对一个节点插入两次,则只有最后一次生效,相当于把元素移动了。

6.2 删除节点(removeChild)

七、猜数字实例练习


一、WebAPI背景知识

API:API本质上是一些现成的函数、对象,程序员可以拿来就用,方便开发。相当于一个工具箱,只不过这个工具箱数目繁多、功能复杂。

在Lesson4中我们直到,JS包含三个部分:

ES(基础语法部分)、DOM(页面文档对象模型)、BOM(浏览器对象模型)。

在JS的WebAPI部分,我们主要学习:

DOM API:操作页面结构

BOM API:操作浏览器。

ES部分,我们主要学习了一些语法知识,在这个基础上学习WebAPI的一些函数,可以实现更丰富的功能。

二、DOM基本概念

2.1 DOM

DOM,Document Object Model,

文档:一个页面就是一个文档,使用document表示。

元素:页面中的所有标签都称为元素,使用element表示。

节点:网页中所有的内容都可以称为节点,使用node表示。

这些概念在JS代码中对应着一个个对象,所以才称为文档对象模型。

W3C标准给我们提供了一系列函数,我们可以操作网页内容、网页结构和网页样式。

2.2 DOM树

一个页面的结构就是一个树形结构,称为DOM树。

三、获取元素

DOM API的关键就是能够得到该元素对应的对。这个就需要通过一个API来实现。

在JS代码中,浏览器会默认创建一些全局对象,document就是其中的最重要的一个,document里面就包含着DOM API。

3.1 querySelector

document.querySelector('选择器'),可以是标签选择器、类选择器、id选择器等等,选择器的用法见这篇博客:Lesson3:CSS_刘减减的博客-CSDN博客

定义一个变量接收选中的元素对象,即 let div = document.querySelector('.one');

console.log打印一个元素对象,打印的是html片段。

console.dir打印一个元素对象,可以能到元素对象的具体属性

缺点:

querySelector中的选择器,如果选中的元素有多个,queryselector 只能获取到第一个

要想都获取到,就需要 querySelectorAll

3.2 querySelectorAll

 3.3 补充

JS中还有一些其他方法也能获取到元素。相比之下,还是querySelector更好用一些。现在就只学习使用querySelector和querySelectorAll。

注意:这俩函数近几年才引入的函数.老版本浏览器(IE6, 7, 8)都不支持

四、事件

4.1 事件概念

用户的一些操作,就会触发事件。JS有一个很大的工作,就是根据用户的操作,来做出不同的响应。

由于用户啥时候做这个操作是不确定的,事件触发的时机也就是不确定的。

JS中支持很多事件,可以给不同的事件定义不同的处理函数,也就能做到响应用户操作的行为。

4.2 事件三要素

事件源:哪个元素触发的
事件类型:是点击,选中,还是修改
事件处理程序:进一步如何处理.往往是一个回调函数。

4.3 举个例子:点击事件

五、操作元素

5.1 获取/修改元素内容

5.1.1 innerText

表示一个节点及其后代的“渲染”文本内容。

<body>
    <div>
        <span>hello1</span>
        <span>hello2</span>
    </div>
    <script>
        let div = document.querySelector('div');
        // 获取div的内部内容
        console.log(div.innerText)
        // 修改div的内部内容
        div.innerText = 'world<span>hello</span>'
    </script>
</body>

可以看到,通过innerText无法获取到div内部的html结构,只能得到文本内容

修改页面的时候也会把span标签当成文本进行设置。

5.1.2 innerHTML

设置或获取HTML语法表示的元素的后代。

<body>
   <div class="one">嘻嘻嘻</div>
   <div class="two">
       <ul>
           <li>11</li>
           <li>22</li>
           <li>33</li>
           
       </ul>
   </div>
   <script>
       let div1 = document.querySelector('.one');
       let div2 = document.querySelector('.two');
       console.log(div1.innerHTML);
       console.log(div2.innerHTML);
       div1.innerHTML = '<h1>我是嘻嘻嘻2</h1>';
       div2.innerHTML += '<h3>我是新加到div2上的</h3>';
   </script>
</body>

 可以看到innerHTML不光能获取到页面的html结构,同时也能修改结构。并且获取到的内容保留会空格和换行。

5.2 获取/修改元素属性

可以通过对象的属性来直接修改,就能直接影响到页面的显示效果。

点击按钮,每按一下,切换按钮的状态。

<body>
    <input type="button" value="按钮按下">
    <script>
        let button = document.querySelector('input');
        button.onclick = function(){
            if(button.value == "按钮按下"){
                button.value = "按钮弹起";
            }else if(button.value == "按钮弹起"){
                button.value = "按钮按下";
            }
        }
    </script>
</body>

5.3 获取修改表单(input标签)元素属性

表单(主要是指input标签)的属性都可以通过DOM来修改
value: input的值.
disabled: 禁用
checked: 复选框会使用
selected: 下拉框会使用
type: input的类型(文本,密码,按钮,文件等)

练习1:密码和文本切换

<body>
    <input type="text"  id="text1">
    <input type="button" value="切换" id="button">
    
    <script>
        let text = document.querySelector('#text1');
        let button = document.querySelector('#button');
        button.onclick = function(){
            if(text.type == 'text'){
                text.type = 'password';
            }else if(text.type == 'password'){
                text.type = 'text';
            }
        }
    </script>
</body>

练习2:点击计数

<body>
    <input type="text" id="num" value="0">
    <input type="button" value="加1" id="but-add">
    <input type="button" value="清空" id="but-clc">
    <script>
        let text = document.querySelector('#num');
        let butadd = document.querySelector('#but-add');
        let butclc = document.querySelector('#but-clc');
        butadd.onclick = function(){
            text.value++;
        }
        butclc.onclick = function(){
            text.value = 0;
        }
    </script>
</body>

5.4 获取修改样式属性

css中指定元素的属性,都可以通过JS来修改。

5.4.1 行内样式操作

<body>
    <!-- 行内样式是指:style以属性的方式写在元素内部 -->
    <div style="font-size: 30px;">yesLove</div>
    <script>
        let div = document.querySelector('div');
        // style是div这个元素的属性
        // style本身也是一个对象,里面存放了当前元素的行内样式,每个css属性都是style对象的一部分
        // css的对象叫font-size。由于在JS里面不能使用-作为变量名,此处需要转为驼峰,所以在JS中获取的时候使用fontSize
        // div.style.fontSize 是一个字符串,先转成数组类型
        let fontsize = parseInt(div.style.fontSize);
        div.onclick = function(){
            fontsize = fontsize + 5;
            // 单位不能少
            div.style.fontSize = fontsize + '5px';
        }
    </script>
</body>

5.4.2 类名样式操作

element.className = '类名';

适用于要修改的样式很多的情况。因为class是JS的保留字,无法作为属性名,所以名字叫做className

很多时候样式可能比较复杂.涉及到很多个属性来进行操作。

使用style 的方式设置,就得一个一个属性进行设置就比较麻烦。

通过CSS里的类就可以达到一次赋值,设置多个CSS属性这样的效果。只要把CSS类名设置上去,此时这个类名里面的属性就会被应用到当前的元素上。

<body>
    <div class="light">
        <ul>
            <li>11111111111</li>
            <li>11111111111</li>
            <li>11111111111</li>
            <li>11111111111</li>
            <li>11111111111</li>
        </ul>
    </div>
    <style>
        div {
            width: 300px;
            height: 300px;
        }
        .light {
            background-color: rgb(230, 201, 201);
            color: black;
        }
        .night {
            background-color: gray;
            color: greenyellow;
        }
    </style>
    <script>
        let div = document.querySelector('div');
        div.onclick = function(){
            if(div.className == 'light'){
                div.className = 'night';
            }else if(div.className == 'night'){
                div.className = 'light';
            }
        }
    </script>
</body>

六、操作节点

6.1 新增节点

6.1.1 创建元素节点(createElement)

虽然创建出新的div,但是div并没有显示在页面上。因为新创建的节点并没有加到DOM树中。 

6.1.2 插入节点到dom树中

①使用appendChild将节点插入到指定节点的最后一个孩子的后面

②使用insertBefore将节点插入到指定节点之前

 

 注意:如果针对一个节点插入两次,则只有最后一次生效,相当于把元素移动了。

6.2 删除节点(removeChild)


被删除节点只是从dom树被删除了,但是仍然在内存中,可以随时加入到dom树的其他位置.
如果上例中的child节点不是element节点的子节点,该方法会抛出异常.

 

七、猜数字实例练习

<body>
    <input type="button" value="重新开始一局游戏" id="reset" >
    <br>
    <div>
        <span>请输入要猜的数字:</span>
        <span><input type="text" id="guessNum"></span>
        <span><input type="button" value="猜" id="guess"></span>
    </div>
    <div>
        <span>已经猜的次数</span>
        <span id="guessCount"></span>
    </div>
    <div>
        <span>结果:</span>
        <span id="result"></span>
    </div>
    <script>
        // 把需要用的JS的DOM对象都准备好
        let resetButton = document.querySelector('#reset');
        let inputNum = document.querySelector('#guessNum');
        let guessButton = document.querySelector('#guess');
        let spanCount = document.querySelector('#guessCount');
        let spanResult = document.querySelector('#result');

        // 生成一个随机数
        let toGuess = Math.floor(Math.random()*100)+1 ; //math.random()生成[0,1) *100 =>[0,100) =>取整+1 [1,100]
        console.log(toGuess);
        let count = 0;
        
        // 判断
        guessButton.onclick = function(){
            // 输入的是String类型,需要进行类型转换
            let guess = parseInt(inputNum.value);
            if(guess < toGuess){
                spanResult.innerHTML= '猜小了';
                spanResult.style.color = 'red';
            }else if(guess > toGuess){
                spanResult.innerHTML = '猜大了';
                spanResult.style.color = 'blue';
            }else if(guess == toGuess){
                spanResult.innerHTML = '猜对了';
                spanResult.style.color = 'green';
                return;
            }
            count++;
            spanCount.innerHTML = count;
        }
        resetButton.onclick = function(){
            inputNum.value = '';
            spanCount.innerHTML = '';
            spanResult.innerHTML = '';
            toGuess = Math.floor(Math.random()*100)+1 ;
        }
    </script>
</body>

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘减减

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值