JQ完成模拟QQ好友分组案例(介绍JQ实现原理)

简介: JQ完成模拟QQ好友分组案例(介绍JQ实现原理)

当我们写这个案例之前,需要引入好JQ文件,以防没有效果

这个案例的需求请看以下效果图

不能重复点击,只有删除掉之后才可以继续点击

效果图:

代码介绍:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .boss {
            position: relative;
            width: 500px;
            height: 600px;
            border: 1px solid black;
            margin: 100px auto;
        }
        li {
            list-style: none;
        }
        .left {
            position: absolute;
            width: 50%;
            height: 100%;
            border: 1px solid red;
            top: 0;
            left: 0;
        }
        .right {
            position: absolute;
            width: 50%;
            height: 100%;
            border: 1px solid pink;
            right: 0;
            top: 0;
        }
        .left_text1,
        .left_text2 {
            width: 50px;
            cursor: pointer;
        }
        .left_box1>div {
            cursor: pointer;
        }
        .box1 {
            cursor: pointer;
        }
        .boss1 {
            height: 20px;
            overflow: hidden;
        }
        .left_text1 {
            float: left;
        }
        .left_text2 {
            float: left;
        }
        .jia {
            height: 20px;
            float: left;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <!-- 大容器 -->
    <div class="boss">
        <!-- 左边分组 -->
        <div class="left">
            <!-- 分组1 -->
            <div class="boss1">
                <div onclick="group(this)" class="left_text1">分组1 </div>
                <div class="jia" onclick="jia(this)">+</div>
            </div>
            <!-- 到时候直接隐藏这个盒子分组1 -->
            <div class="left_box1">
                <div data="1" onclick="fun(this)">1</div>
                <div data="2" onclick="fun(this)">2</div>
                <div data="3" onclick="fun(this)">3</div>
                <div data="4" onclick="fun(this)">4</div>
            </div>
            <!-- 分组2 -->
            <div class="boss1">
                <div onclick="group(this)" class="left_text2">分组2 </div>
                <div class="jia" onclick="jia(this)">+</div>
            </div>
            <!-- 到时候直接隐藏这个盒子分组2 -->
            <div class="left_box1">
                <div data="5" onclick="fun(this)">11</div>
                <div data="6" onclick="fun(this)">22</div>
                <div data="7" onclick="fun(this)">33</div>
                <div data="8" onclick="fun(this)">44</div>
                <div data="9" onclick="fun(this)">1</div>
                <div data="10" onclick="fun(this)">2</div>
                <div data="11" onclick="fun(this)">3</div>
                <div data="12" onclick="fun(this)">4</div>
            </div>
        </div>
        <!-- 右边 -->
        <div class="right"></div>
    </div>
</body>
<script src="jquery-1.8.3.min.js"></script>
<script>
    // 注意 我先写了行内事件 全是传入this this指向本身
    // 这是点击分组1与分组2来回显示隐藏
    function group(e) {
        // 看布局 点击分组1或分组2后找到需要隐藏的div添加toggle()
        // toggle()的作用是看你元素是否显示或隐藏 如果是显示它就隐藏 如果是隐藏它就显示
        $(e).parent().next().toggle()
    }
    // 点击数字模块
    function fun(e) {
        // e 传入的是this 就是本身
        // 先不看这一个判断 主要的是下面Clone部分 读懂Clone部分再来看这一段
        // 判断点击的是哪一边的div 因为我是直接克隆
        if ($(e).parent().attr("class") == "right") {
            // 判断点击本身父级的类名是否是right 如果是我们就删除
            e.remove()
        } else { // 如果类名不是right 就是说明是左边框中的div
            // 如果this的父级类名不是right 调用Clone()
            Clone(e)
        }
    }
    //  封装克隆与不能重复点击
    function Clone(e) {
        // 克隆 循环右边创建子级创建div的个数
        for (let i = 0; i < $(".right>div").length; i++) {
            // 判断自身的自定义属性是否与右边框子级div的自定义属性是否相等
            console.log($(".jia").parent().next().children().attr("data"), $(".right>div").eq(i).attr("data"));
            if ($(e).attr("data") == $(".right>div").eq(i).attr("data")) {
                // 相等直接返回 这是不能重复点击
                return
            }
        }
        // 我们直接就是克隆 点了哪个就克隆哪个 
        let divs = $(e).clone(true)
        // 添加类名 主要还是添加一个小手样式
        divs.addClass("box1")
        // 我们把克隆好的div添加到右边框中
        $(".right").append(divs)
    }
    // 点击+
    function jia(e) {
        // 我们直接调用Clone()
        // 我们把左边中数字添加到右边 children()获取所有子元素
        // 看到这注意看我的布局就可以找到
        // 必须循环 
        for (let i = 0; i < $(e).parent().next().children().length; i++) {
            // children()获取的是一个集合
            Clone($(e).parent().next().children().eq(i))
        }
    }
</script>
</html>

感谢大家的阅读,如有不对的地方,或是有bug的地方,可以向我提出,感谢大家,过一段时间会写一篇用原生JS实现这个案例。

相关文章
|
10月前
|
移动开发 JavaScript IDE
【HarmonyOS 5】Laya游戏如何鸿蒙构建发布详解
LayaAir引擎是国内最强大的全平台引擎之一,当年H5小游戏火的时候,腾讯入股了腊鸭。我还在游戏公司的时候,17年曾经开发使用腊鸭的H5小游戏,很怀念当年和腊鸭同事一起解决问题的时光。
274 0
|
6天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
34422 16
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
18天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
45254 142
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
8天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
4760 20
|
1天前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
1109 5
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
6天前
|
人工智能 API 开发者
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案
阿里云百炼Coding Plan Lite已停售,Pro版每日9:30限量抢购难度大。本文解析原因,并提供两大方案:①掌握技巧抢购Pro版;②直接使用百炼平台按量付费——新用户赠100万Tokens,支持Qwen3.5-Max等满血模型,灵活低成本。
1659 5
阿里云百炼 Coding Plan 售罄、Lite 停售、Pro 抢不到?最新解决方案

热门文章

最新文章