js进阶第二天

一、封装获取元素的方法

function get_id(id){
    // 这个函数专门来通过id获取元素
    return document.getElementById(id)
}

function get_els(parentId, tagName){
    // 这个函数专门来获取某个父标签范围内的某些标签
    return get_id(parentId).getElementsByTagName(tagName)
}

二、表单元素属性

常用的表单元素包括 input、select、textarea、button等,下面我们学习这些表单元素中常用的属性。

  • value 用于获取和设置表单元素的内容
  • type 用于获取和设置input标签的类型
  • checked 复选框选中属性(true表示选中, false表示不选中)
  • disabled 用于禁用表单输入或选择操作

三、其他事件类型

之前的课程里,我们一直在用click点击事件,当然,点击事件也是我们使用最多的事件类型。那么,除了点击事件之外,我们今天再介绍几种常见的事件类型。

  • dblclick——双击事件
  • mouseover——鼠标移入事件
  • mouseout——鼠标移出事件
  • change——表单值改变事件
  • focus——表单聚焦事件
  • blur——表单失焦事件
  • input——表单输入事件

四、动态设置class

设置class的方法:

// 修改类名 可以同时修改多个
element.className = "name1 name2 ..."

// 在类名列表里添加类名
element.classList.add("active");
// 在类名列表里删除类名
element.classList.remove("active");

开关思想

开关思想:定义一个变量, 这个变量决定了一个状态,事件触发的时候,根据这个变量的值,执行对应的操作,操作完还需要修改这个变量的值。

比如:点击按钮,显示或隐藏div

// 需要一个变量存储状态
var flag = true;
get_id("btn").onclick = function () {
    // console.log("点击事件触发了");
    // if(flag==true){
    if (flag) {
        // 把div的left值改成-200px
        my$("box").style.left = "-200px";
        // 需要把flag改成false,防止下一次点击这个flag还是true,如果flag还是true,就会一直走这里的代码
        flag = false
    } else {
        my$("box").style.left = "0px";
        // 防止下一次点击flag还是false,就还是会走这里的代码
        flag = true
    }
}

开关灯案例:

  1. 当点击"关 灯"按钮时,将body背景颜色设置成黑色,同时将 “关 灯” 设置成 “开 灯”;
  2. 当点击"开 灯"按钮时,将body背景颜色设置成白色,同时将 “开 灯” 设置成 “关 灯”.

html和css代码

<style>
.cls{
     background-color: black;
}
</style>
<input type="button" value="开/关灯"  id="btn">

JavaScript代码

 var btn = document.getElementById("btn");
    btn.onclick = function () {
    // document.body可以获取body标签
 /* if (flag) {
        document.body.className = "cls"
        flag = false
    } else {
        document.body.className = ""
        flag = true
    } */
        
    // 其实只需要判断当前body的类名是不是cls
    // document.body.className = 条件 ? true : false
        //叫做三元表达式 
    document.body.className = document.body.className != "cls"?"cls":"";
}

四、全选反选功能

功能:

  1. 默认进来显示"全选",选框未选中
  2. 选择"全选"选框,列表的选框全部选中,文字变成"全不选"
  3. 点击"全不选"选框,列表所有选框取消选中,文字变回"全选"
  4. 点击列表对应的选框,如果全部都选中,触发"全选"选框选中,文字变成"全不选"
  5. 取消任意一个列表选框,逻辑变成没有全选,取消"全选"选框选中,文字变成"全选"
  6. 按钮"反选",选中与列表选框相反的选框,逻辑上遵循上述全选规则

html和css代码

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>全选反选功能</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        .wrap {
            width: 300px;
            margin: 100px auto 0;
        }

        table {
            border-collapse: collapse;
            border-spacing: 0;
            border: 1px solid #c0c0c0;
            width: 300px;
        }

        th,
        td {
            border: 1px solid #d0d0d0;
            color: #404060;
            padding: 10px;
        }

        th {
            background-color: #09c;
            font: bold 16px "微软雅黑";
            color: #fff;
        }

        td {
            font: 14px "微软雅黑";
        }

        td:nth-of-type(1) {
            text-align: center;
        }

        tbody tr,
        tfoot tr {
            background-color: #f0f0f0;
        }

        tbody tr:hover {
            cursor: pointer;
            background-color: #fafafa;
        }

        button {
            width: 50px;
        }
    </style>
</head>

<body>

    <div class="wrap">
        <table>
            <thead>
                <tr>
                    <th>
                        <input type="checkbox" id="j_cbAll" />
                        <span id="txt">全选</span>
                    </th>
                    <th>菜名</th>
                    <th>饭店</th>
                </tr>
            </thead>
            <tbody id="j_tb">
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>红烧肉</td>
                    <td>好吃再来</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>西红柿鸡蛋</td>
                    <td>好吃再来</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>油炸冰棍</td>
                    <td>好吃再来</td>
                </tr>
                <tr>
                    <td>
                        <input type="checkbox" />
                    </td>
                    <td>清蒸鲈鱼</td>
                    <td>好吃再来</td>
                </tr>

            </tbody>
            <tfoot>
                <tr>
                    <td colspan="5"><button id="rev">反选</button></td>
                </tr>
            </tfoot>
        </table>
    </div>
</body>

</html>

JavaScript代码

//获取全选的这个复选框
var ckAll = get_id("j_cbAll");
//获取文字显示span
var txt = get_id("txt");
//获取tbody中所有的小复选框
var cks = get_els("j_tb", "input");
//点击全选的这个复选框,获取他当前的状态,然后设置tbody中所有复选框的状态
ckAll.onclick = function () {
    console.log(this.checked);
    for (var i = 0; i < cks.length; i++) {
        cks[i].checked = this.checked;
    }
    //顺便修改文本显示
    txt.innerText = this.checked ? "全不选" : "全选";
};

//获取tbody中所有的复选框,分别注册点击事件
for (var i = 0; i < cks.length; i++) {
    /* cks[i].onclick = function () {
             var flag = true; //默认都被选中了
             //判断是否所有的复选框都选中
             for (var j = 0; j < cks.length; j++) {
                 if (!cks[j].checked) {
                     //没选中就进来了
                     flag = false;
                     break;
                 }
             }
             //全选的这个复选框的状态就是flag这个变量的值
             ckAll.checked = flag;
             //记得修改文本显示
             txt.innerText = flag?"全不选":"全选";
         };  */
    cks[i].onclick = fn;
}

// 反选功能
// 获取按钮
var btn = get_id("rev");
btn.onclick = function () {
    for (var i = 0; i < cks.length; i++) {
        cks[i].checked = !cks[i].checked
    }
    fn();
}

// 代码复用,函数封装
function fn() {
    var flag = true; //默认都被选中了
    //判断是否所有的复选框都选中
    for (var j = 0; j < cks.length; j++) {
        if (!cks[j].checked) {
            //没选中就进来了
            flag = false;
            break;
        }
    }
    //全选的这个复选框的状态就是flag这个变量的值
    ckAll.checked = flag;
    //记得修改文本显示
    txt.innerText = flag ? "全不选" : "全选";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值