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

news2024/12/23 8:13:16

当我们写这个案例之前,需要引入好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实现这个案例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1180326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每日一题】2586. 统计范围内的元音字符串数-2023.11.7

题目&#xff1a; 2586. 统计范围内的元音字符串数 给你一个下标从 0 开始的字符串数组 words 和两个整数&#xff1a;left 和 right 。 如果字符串以元音字母开头并以元音字母结尾&#xff0c;那么该字符串就是一个 元音字符串 &#xff0c;其中元音字母是 a、e、i、o、u 。…

Python采集数据代码示例

基本的爬虫程序的示例&#xff1a; typescript import * as request from request; // 信息 const proxyHost ; const proxyPort ; // 网站的 URL const url ; // 使用 request 库发起请求 request({ url, method: GET, proxy: { host: proxyHost…

vue递归获取树形菜单

文章目录 前言什么是递归&#xff1f; 一、数据集二、 递归函数三、打印树形结构展示 前言 什么是递归&#xff1f; 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。 递归 粗略的理解为 循环 &#xff0c;只不过 递归 是调用自身。 在实际使用中&#xf…

libwebsockets入门

WebSocket是一种在单个TCP连接上进行全双工通讯的协议&#xff0c;用于在Web客户端和服务器之间建立持久连接&#xff0c;进行实时通信。它是HTML5开始提供的一种通讯方式&#xff0c;通过使用WebSocket连接&#xff0c;web应用程序可以执行实时的交互&#xff0c;而不是以前的…

将json数据转换为Python字典

import requests from bs4 import BeautifulSoup import json# 定义代理信息 proxy_host www.duoip.cn proxy_port 8000# 定义要爬取的url url http://localhost:9200/_search# 创建一个requests.Session对象&#xff0c;并设置代理 session requests.Session() session.pr…

Python3,3行代码,给照片填充背景色,从此跟照相馆说拜拜。

3行代码照片上背景色 1、引言2、代码实战2.1 思路2.2 安装2.3 实例 3、总结 1、引言 小屌丝&#xff1a; 鱼哥&#xff0c;帮个忙。 小鱼&#xff1a; 在开车。 小屌丝&#xff1a;… 那你先忙&#xff0c;不打扰你了。 小鱼&#xff1a;…我可以说话的&#xff0c;没事。 小屌…

3.4、Linux小程序:进度条

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 回车与换行的概念和区别 行缓冲区概念 进度条代码 version1 version2 version3 回车与换行的概念和区别 换行\n&#xff0c;回车\r 似乎无需多言 行缓冲区概念 这里我们通过例子来简单理解即可&#xff0c;深入…

Wait-Notify机制

文章目录 1. 简介2. 相关API3. wait notify的正确姿势4. 总结 1. 简介 回顾Minitor锁的结构&#xff1a; Owner线程发现条件不满足&#xff0c;调用wait方法&#xff0c;即可进入WaitSet变为WAITING状态BLOCKED和WAITING的线程都处于阻塞状态&#xff0c;不占用CPU时间BLOCK…

新浪微博一键删除所有内容

亲自测试用 具体操作如下&#xff1a; 对应的 1 2 如下&#xff0c;进入这个界面是按F12 就可以看到 最后画横线的位置 替换自己的id 对应的就是 3 具体代码如下 //向删除接口发起请求&#xff0c;删除对应节点 function del_weibo(id) {var myHeaders new Headers();myHea…

小白学爬虫:通过商品ID获取1688跨境属性数据接口|1688商品属性接口|1688一件代发数据接口|1688商品详情接口

通过商品ID获取1688跨境属性数据接口可以使用1688开放平台提供的API接口实现。以下是获取跨境属性数据的基本步骤&#xff1a; 点击获取测试key和secret构造请求参数&#xff0c;包括商品ID和其他必要参数&#xff0c;如接口权限、请求类型等。通过API接口链接&#xff0c;将请…

App启动——Application的创建

Application的创建 一个 app 启动时候创建一个 Application 对象。这个对象的创建时间在 frameworks 中调用创建的&#xff0c;创建流程可见下图&#xff0c;涉及的几个主要的类调用。 一、主线程运行入口 ​ APP进程起来后&#xff0c;主线程运行入库 ActivityThread.main()…

Docker DeskTop的安装(Windows版本)

目录 一、官网下载Docker安装包 二、安装Docker DeskTop 2.1 双击 Docker Installer.exe 以运行安装程序 2.2 安装操作 2.3 关于更改Docker安装位置 2.3.1 自定义安装路径&#xff08;不推荐&#xff09; 2.3.2 移动 Docker 镜像存储位置 三、启动Docker DeskTop 一、官…

GaussDB SQL基础语法-变量常量

目录 一、前言 二、GaussDB数据库中的常量和变量的基本概述及语法定义 1、变量定义 2、常量定义 3、其他&#xff08;%TYPE、%ROWTYPE属性&#xff09; 三、在GaussDB数据库中如何使用变量&常量&#xff08;示例&#xff09; 示例一&#xff0c;定义常量&变量&a…

有什么软件可以管控员工的电脑桌面

信息化的快速发展&#xff0c;员工在工作中使用电脑的情况越来越普遍。然而&#xff0c;员工在使用电脑时可能会出现工作效率低下、滥用公司资源等问题&#xff0c;因此对员工电脑进行监测和管理显得尤为重要。 1、域之盾软件 它是一款功能强大的电脑监控软件&#xff0c;可以…

(二)Spring源码解析:默认标签解析

一、概述 还记得我们在上一讲末尾提到的关于默认标签解析和自定义标签解析吧。本讲就来针对默认标签解析进行讲解。为了便于衔接上一讲的内容&#xff0c;我们将源码部分粘贴出来&#xff1a; 从上图中的源码中&#xff0c;我们可以看出默认标签的解析是在parseDefaultElement…

Unit2_1:动态规划DP

文章目录 一、介绍二、0-1背包问题问题描述分析伪代码时间复杂度 三、钢条切割问题问题描述分析伪代码过程 四、矩阵链乘法背景性质分析案例伪代码 一、介绍 动态规划类似于分治法,它们都将一个问题划分为更小的子问题 最优子结构:问题的最优解包含子问题的最优解。DP适用的原…

一种单总线串口通信的调试方法

单总线的优点&#xff1a; 节省IO口&#xff0c;发送时可以将单片机的RXD设置为普通IO进行软件模拟发送&#xff0c;发送完设置为串口接收。避免通信干扰&#xff0c;由于是通过IO口对三极管/MOS管进行拉高拉低&#xff0c;外部信号不易对IO口进行干扰&#xff0c;EMI&#xf…

代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结

代码随想录算法训练营第四十六天 | LeetCode 139. 单词拆分、多重背包、背包总结 文章链接&#xff1a;单词拆分 多重背包 背包总结 视频链接&#xff1a;单词拆分 1. LeetCode 139. 单词拆分 1.1 思路 本题的那些单词就是物品&#xff0c;字符串就是背包&#xff0c;问用这些…

大数据学习之一文学会Spark【Spark知识点总结】

文章目录 什么是SparkSpark的特点Spark vs HadoopSparkHadoopSpark集群安装部署Spark集群安装部署StandaloneON YARN Spark的工作原理什么是RDDRDD的特点Spark架构相关进程Spark架构原理 Spark实战&#xff1a;单词统计Scala代码开发java代码开发任务提交 Transformation与Acti…

echarts 类目轴设置xAxis.interval不起效果

情景&#xff1a;在xAxis.typecategory&#xff1b;设置xAxis.interval不起效果&#xff1b; 解决方案&#xff1a;通过设置xAxis.axisLabel.interval属性