JavaScrip入门笔记(二)

使用JS完成表格的隔行换色

  • 新标签的学习

  <thead>
    <tr>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td></td>
    </tr>
  </tbody>
  • 确定事件(页面加载事件onload)

  • 获取元素: 获取表格(document.getElementById()),最终是为了获取表格中tbody里面的行数(长度)

    • Tbody里面的行数(rows.length)
    • JS的遍历(for 循环)
    • 获取奇数行和偶数行(对遍历中角标对2取余)
    • 设置背景颜色(.style.backgroundColor)
  • 步骤分析

第一步: 确定事件(onload),并为其绑定一个函数

第二步: 书写函数(获取表格)

第三步: 获取tbody里面的行数

第四步: 对tbody里面的行数进行遍历

第五步: 获取奇偶行和偶数行(角标对2取余)

第六步: 分别对奇数行和偶数行设置背景颜色

  • 代码实现

   <script>
      //无名函数
      window.onload = function() {
        //1.获取表格
        var tbEle = document.getElementById("tbl");
        //2.获取表格中tbody里面的行数(长度)
        var len = tbEle.tBodies[0].rows.length;
        // alert(len);
        //3.对tbody里面的行进行遍历
        for(var i = 0; i < len; i++) {
          if (i % 2 == 0) {
            //4.对偶数行设置背景颜色
            tbEle.tBodies[0].rows[i].style.backgroundColor = "pink";
          } else {
            //5.对奇数行设置背景颜色
            tbEle.tBodies[0].rows[i].style.backgroundColor = "yellow";
          }
        }
      }
   </script>

实现一个表格的高亮显示

分析:

第一步: 确定事件(onmouseover 和 onmouseout)并分别为其绑定一个函数

第二步: 获取鼠标移上去的那行,对其设置背景颜色

第三步:移出鼠标,对其设置背景颜色

<script>
      function changeColor(id, flag) {
        if (flag == ‘over‘) {
          document.getElementById(id).style.backgroundColor="red";
        } else if (flag == ‘out‘) {
          document.getElementById(id).style.backgroundColor="white";
        }
      }
  </script>
  ?
  <body>
      <table border="1" width="500" height="50" align="center" id="trl">
        <thead>
          <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>年龄</th>
          </tr>
        </thead>
        <tbody>
          <tr onmouseover="changeColor(‘tr1‘, ‘over‘)" id="tr1" onmouseout="changeColor(‘tr1‘, ‘out‘)">
            <td>1</td>
            <td>张三</td>
            <td>22</td>
          </tr >
        </tbody>
      </table>
  </body>
  • 总结

之前使用过的事件(onsubmit/onclick/onload/ onfocus/onblur /onmouseover/onmouseout)

onfocus/onblur :

聚焦离焦事件,用于表单校验的时候比较合适

Onclick/ondblclick:

鼠标单击和双击事件

onkeydown/onkeypress:

搜索引擎使用较多

onload: 页面加载,就访问的代码,其他所有的操作(匿名方式)都可以放到这个绑定的函数里

onmouserover/onmouseout/onmousemove: 购物网站商品详情页

onsubmit: : 单提交事件

onchange: 当用户改变内容的时候使用这个事件(二级联动)

  • 技术分析

确定事件(鼠标单击事件 onclick), 事件绑定到前面的复选框

获取编号前面的复选框的专题(是否选中)

? 获取复选框: var checkAllEle = document.getElementById("id")? 获取复选框的状态: checkAllEle.checked?

获取下面所有的复选框:

document.getElementByName("name")

  • 步骤分析

第一步: 确定事件(onclick)并为其绑定一个函数

第二步: 书写函数(获取编号前面的复选框, 获取其状态)

第三步: 判断编号前面复选框的状态(如果为选中, 获取下面所有的复选框, 并将其状态置为选中)

第四步: 判断编号前面的复选框的状态(如果未选中, 获取下面所有的复选框, 并将其状态置为未选中)

<script>
      function checkAll() {
          //1.获取编号前面的复选框
          var checkAllEle = document.getElementById("checkAll");
          //2.对编号前面的复选框的状态进行判断
          if (checkAllEle.checked == true) {
              //3.后去下面所有的复选框
              var checkOnes = document.getElementsByName("checkOne");
              for (var i = 0; i < checkOnes.length; i++) {
                  //5.拿到每一个复选框,并将其状态置为选中
                  checkOnes[i].checked = true;
              }
          } else {
              //6.获取下面所有的复选框
              var checkOnes = document.getElementsByName("checkOne");
              //7.对获取的所有复选框进行遍历
              for (var i = 0; i < checkOnes.length; i++) {
                  //8.拿到每一个复选框,并将其状态置为未选中
                  checkOnes[i].checked = false;
              }
          }
      }
  </script>

  <html>
      <head>
            <title></title>
            <style></style>
            <link/>
      </head>
      <body>
            <span></span>
            <div>
                <img src=‘‘ />
            </div>
            <p></p>
      </body>
  </html>

Document对象

Document: 整个html文件都成为一个document文档

Element: 所有的标签都是Element元素

Attribute: 标签里面的属性

Text: 标签中间夹着的内容为 text文本

Node: document,element、attribute、text统称为结点node

(getElementsByName(), getElementsByTagName() ) 后面两个方法获取之后需要遍历!

Element 对象

我们所认知的HTML页面中所有的标签都是element元素

element.appendChild() 向元素添加新的子节点,作为最后一个子节点

element.firstChild() 返回元素的首个子节点

element.getAttribute() 获得指定属性值

element.innerHTML 设置或返回元素的内容

element.insetBefore() 在指定的已有的子节点之前插入新节点.

element.setAtrribute()

Attribute对象

我们所认知的html页面中所有标签里面的属性都是attribute

attr.value 设置或返回属性的值

DOM练习

  在页面中使用列表显示一些城市  <ul>    <li>北京</li>    <li>上海</li>    <li>广州</li>  </ul>  我们希望点击一个按钮实现动态添加城市  ?  分析:      事件(onclick)      获取ul元素节点      创建一个城市的文本节点      创建一个li元素节点      使用element里面的方法appendChild()来添加子节点

代码

  <!DOCTYPE html>
  <html>
      <head>
          <meta charset="UTF-8">
          <title>动态添加城市</title>
          <script>
              window.onload = function() {
                  document.getElementById("btn").onclick = function() {
                      //1.获取ul元素节点
                      var ulEle = document.getElementById("ul1");
                      //2.创建城市文本结点
                      var textNode = document.createTextNode("深圳");  //深圳
                      //3.创建li元素节点
                      var liEle = document.createElement("li");  // <li></li>
                      //4.将城市文本结点添加到li元素中去
                      liEle.appendChild(textNode);
                      //5.讲li添加到ui中去
                      ulEle.appendChild(liEle);
                  }
              }
          </script>
      </head>
      <body>
          <input type="button" value="添加新城市" id="btn" />
          <ul id="ul1">
              <li>北京</li>
              <li>上海</li>
              <li>广州</li>
          </ul>
      </body>
  </html>

用JS完成省市二级联动

  1. 需求分析

    希望在注册页面中添加一个字段(籍贯), 当用户选择一个具体的省份,在后面的下拉列表中动态加载该省份下所有的城市,显示效果如下

  2. 技术分析:

    事件(onchange)

    使用一个二维数组来存储省份和城市(二维数组的创建?)

    获取用户选择的省份(使用方法传参的方式: this.value)

    遍历数组 (获取省份与用户选择的省份比较, 如果相同了, 继续遍历该省份下所有的城市)

    创建文本结点和元素结点,并进行添加操作

    createTextNode / createElement appendChild()

  3. 步骤分析

    第一步: 确定事件(onchange)并为其绑定一个函数

    第二步: 创建一个二维数组用于存储省份和城市

    第三步: 获取用户选择的省份

    第四步: 遍历二维数组中的省份

    第五步: 将遍历的与用户选择的省份比较

    第六步: 如果相同,遍历该省份下的所有城市

    第七步: 创建城市文本结点

    第八步: 创建option元素结点

    第九步: 将城市文本结点添加到option元素结点中去

    第十步: 获取第二个下拉列表,讲option元素结点添加进去

    第十一步: 每次操作前清空下拉列表的option内容

代码:

  <script>
  ?
      //1.创建一个二维数组用于存储省份和城市
      var cities = new Array(4);
      for (var i = 0; i < cities.length; i++) {
        cities[i] = new Array("武汉市" + i, "黄冈市" + i, "荆州市" + i);
      }
      function changeCity(val) {
  ?
        //7.获取第二个下拉列表
        var cityEle = document.getElementById("city");
  ?
        //9.清空第二个下拉列表的option内容
        cityEle.options.length = 0;
  ?
        //2.遍历二维数组中的省份
        for (var i = 0; i < cities.length; i++) {
          if (val == i) {
            //3.遍历用户选择省份下的城市
            for (var j = 0; j < cities[i].length; j++) {
              //4.创建城市的文本操作
              var textNode = document.createTextNode(cities[i][j]);
              //5.创建option元素结点
              var opEle = document.createElement("option");
              //6.将城市的文本结点添加到option元素结点
              opEle.appendChild(textNode);
              //8.将option元素结点添加到第二个下拉列表中去
              cityEle.appendChild(opEle);
            }
          }
        }
      }
  </script>
  ?
  <tr>
      <td>籍贯</td>
      <td>
        <!--2.确定事件,通过函数传参的方式拿到改变后的城市-->
        <select onchange="changeCity(this.value)">
          <option>--请选择--</option>
          <option value="0">湖北</option>
          <option value="1">湖南</option>
          <option value="2">河南</option>
          <option value="3">河北</option>
        </select>
        <select id="city">
  ?
        </select>
      </td>
  </tr>

JS的内置对象

  • JS Array
  • JS Boolean
  • JS Date
  • JS Math
  • JS Number
  • JS String
  • JS RegExp
时间: 2024-11-10 01:23:56

JavaScrip入门笔记(二)的相关文章

nodeJs入门笔记(二)

js中window通常是全局变量 global 是node.js里的全局变量 node中能访问的对象一般都是 global的 属性 global 对象属性 process 用于描述当前Node 进程状态的对象,提供了一个与操作系统的简单接口. process.argv :命令行参数数组,第一个元素是 node,第二个元素是脚本文件名,从第三个元素开始每个元素是一个运行参数 console.log(process.argv); $ node argv.js 1991 name=byvoid --v

kettle入门笔记(二) 之 kettle报的坑爹错误:Error occured while trying to connect to the database

1 引言 在用kettle开发时常会出现 Error occured while trying to connect to the database 错误,但是仔细观察日志,引起这个错误的原因不尽相同.这个错误看起来很简单,但是有时候越简单的错误越没有耐心改,尤其是忙的时候,不小心填错了某个参数导致这个错误但是自己感觉没问题却跑不成功,这是最烦人的.这时候需要淡定.不妨上网查查,错误也许就可以愉快的解决了.下面给出这错误的更细节错误的不同发生情况. 2 示例 有个很简单的ktr脚本(当前kett

Shader 入门笔记(二) CPU和GPU之间的通信

渲染流水线的起点是CPU,即应用阶段. 1)把数据加载到显存中 2)设置渲染状态,通俗说这些状态定义了场景中的网格是怎样被渲染的. 3)调用DrawCall,一个命令,CPU通知GPU.(这个命令仅仅会指向一个需要被渲染的图元列表,并不会包含材质信息,因为在上一阶段已经完成) CPU流水线 GPU从CPU那里得到渲染命令后,就会进行一系列流水线操作,最终把图元渲染到屏幕上. 几何阶段: 顶点着色器/曲面细分着色器/几何着色器 裁剪(Clipping):将不在视野范围内的顶点裁减掉,这阶段可配置的

SpringBoot入门笔记(二)、使用fastjson

1.添加fastjson配置 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.15</version> </dependency> 2.重写configureMessageConverters @Override public void configureMessageConve

《逻辑思维简易入门》(第2版) 阅读笔记二

<逻辑思维简易入门>(第2版) 阅读笔记二 本周阅读的是<逻辑思维简易入门>的第三章,也就是说,本书的第一部分就已经读完了. 第三章.信念的优点 信念和负信念是人们在接受一个事物时一种心理态度,延伸来说也就是对事物的认知态度.因为我们在研究 逻辑思维的时候,都有一个前提:“以正常情况以及说话者真诚”,所以有人如果对于一件事物不做回应,我们可以认为这是一种既不相信,也不怀疑的的态度. 信念的优缺点有很多,在书中主要介绍了下面几种: 1.准确性 好的信念实在准确的表达事实,同样真的信念

嵌入式OS入门笔记-以RTX为案例:八.RTX的进程间通讯(二)

嵌入式OS入门笔记-以RTX为案例:八.RTX的进程间通讯(二) RTX的进程间通讯主要依赖于四种机制,分别是事件(Event),互斥锁(Mutex),旗语或信号量(Semaphore),和邮箱(Mailbox).前三种机制侧重进程间的同步,邮箱则侧重进程间的数据通讯.这次讲一下信号量和邮箱. 1.信号量(Semaphore) 1.简介 信号量其实是一个很抽象的操作系统原语,它最早由荷兰计算机科学家Dijkstra提 出,用于解决多项资源的分配问题.实际上信号量的适用范围非常广,可以很好地解决很

Python学习入门笔记(二):Python运算符

1.算术运算符 "+"加法:3+2=5 "-"减法:3-2=1 "*"乘法:3*2=6 "/"实数除法:3/2=1,3.0/2=1.5 "//"整数除法:5.6//2=2.0 "%"求余数:17%6=5 "**"求幂运算:2**3=8 2.赋值运算符 "="等于:x=3 "+="加等于:x+=2 "-="减等

Django入门笔记【二】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 创建管理员(admin user) 运行代码 1 $ python manage.py createsuperuser 2 3 Username: admin 4 Email address: [email protected] 5 6 Password: ********* 7 Passw

MySQL入门笔记(一)

MySQL入门笔记(二) 一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET [=] charset_name; ??上述代码中DATABASE和SCHEMA完全相同,可任选一个(花括号内的参数为任选其一): ??添加IF NOT EXISTS的作用则是,若新建数据库的名称与已有数据库名称冲突,则产