前端jQuery

  jQuery介绍

    1.jQuery是一个轻量级的、兼容多浏览器的JavaScript库。

    2.jQuery使用户能够更方便地处理HTML Document、Events、实现动画效果、方便地进行Ajax交互,能够极大地简化JavaScript编程。它的宗旨就是:“Write less, do more.“

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

前端jQuery 随笔 第1张

 

  jQuery的优势

    1. 一款轻量级的JS框架。jQuery核心js文件才几十kb,不会影响页面加载速度。
    2. 丰富的DOM选择器,jQuery的选择器用起来很方便,比如要找到某个DOM对象的相邻元素,JS可能要写好几行代码,而jQuery一行代码就搞定了,再比如要将一个表格的隔行变色,jQuery也是一行代码搞定。
    3. 链式表达式。jQuery的链式操作可以把多个操作写在一行代码里,更加简洁。
    4. 事件、样式、动画支持。jQuery还简化了js操作css的代码,并且代码的可读性也比js要强。
    5. Ajax操作支持。jQuery简化了AJAX操作,后端只需返回一个JSON格式的字符串就能完成与前端的通信。
    6. 跨浏览器兼容。jQuery基本兼容了现在主流的浏览器,不用再为浏览器的兼容问题而伤透脑筋。
    7. 插件扩展开发。jQuery有着丰富的第三方的插件,例如:树形菜单、日期控件、图片切换插件、弹出窗口等等基本前端页面上的组件都有对应插件,并且用jQuery插件做出来的效果很炫,并且可以根据自己需要去改写和封装插件,简单实用。

  jQuery内容:

    1. 选择器
    2. 筛选器
    3. 样式操作
    4. 文本操作
    5. 属性操作
    6. 文档处理
    7. 事件
    8. 动画效果
    9. 插件
    10. each、data、Ajax

   下载链接:https://jquery.com,首先需要下载这个jQuery的文件,然后在HTML文件中引入这个文件,就可以使用这个文件中帮我们提供的jquery的接口了。

  jQuery的引入方式有两种:

      1.直接下载文件到本地(最常用),从本地中导入

      2.使用文件的网络地址(https://cdn.bootcss.com/jquery/3.4.1/core.js),就像我们img标签里面的那个src的用法差不多。

  引入完之后,就可以直接使用jQuery的语法来写了,但是还是要写在script标签里面,并且要注意引入顺序,先引入文件,再在script标签里面写jQuery的代码,先导入再使用。

<!--<script src="jquery-3.4.1.js"></script>-->
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

  jQuery版本

    • 1.x:兼容IE678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此一般项目来说,使用1.x版本就可以了,最终版本:1.12.4 (2016年5月20日)
    • 2.x:不兼容IE678,很少有人使用,官方只做BUG维护,功能不再新增。如果不考虑兼容低版本的浏览器可以使用2.x,最终版本:2.2.4 (2016年5月20日)
    • 3.x:不兼容IE678,只支持最新的浏览器。注意很多老的jQuery插件不支持3.x版。目前该版本是官方主要更新维护的版本,我们学习就用3.几的就行了,工作中如果需要兼容IE678,就用1.几版本的就行,2.几版本的就别用了。

    维护IE678是一件让人头疼的事情,一般我们都会额外加载一个CSS和JS单独处理。值得庆幸的是使用这些浏览器的人也逐步减少,PC端用户已经逐步被移动端用户所取代,如果没有特殊要求的话,一般都会选择放弃对678的支持。

  jQuery对象

    jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是 jQuery独有的。如果一个对象是 jQuery对象,那么它就可以使用jQuery里提供的方法:例如$(“#i1”).html()。

         jQuery对象是包装 DOM对象后产生的,但是 jQuery对象无法使用 DOM对象的任何方法,同理 DOM对象也没不能使用 jQuery里的方法。

前端jQuery 随笔 第2张

jQuery对象转成DOM对象,通过一个jQuery对象+[0]索引零,就变成了DOM对象,就可以使用JS的代码方法了,DOM对象转换成jQuery对象:$(DOM对象),通过$符号包裹一下就可以了

前端jQuery 随笔 第3张

  jQuery基础语法

     $(selector).action()  #$(selector)找到某个标签,.action()通过这个标签对象调用它的一些方法。 

前端jQuery 随笔 第4张

  查找标签

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 100px;
            width: 100px;
        }
    </style>

</head>
<body>

<div id="d1" class="c1"></div>

<ul>
    <li>第一个</li>
    <li id="l2">
        <span>
            第二个
        </span>
    </li>
    <li>第三个</li>
    <li>第四个</li>
    <li id="l4">第五个</li>
    <li class="biaoge">第六个</li>
    <li>第七个</li>

</ul>

<div id="d2" class="c1" title="xxx" type="text">

</div>

    用户名:<input type="text" disabled>
    密码:<input type="password">

<input type="checkbox" checked>篮球
<input type="checkbox">足球

<input type="radio"><input type="radio"><select name="" id="">
    <option value="1">熊大</option>
    <option value="2" selected>熊二</option>
</select>

<!--<script src="jquery-3.4.1.js"></script>-->
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>

</body>
</html>

 

前端jQuery 随笔 第5张

    不管找什么标签,用什么选择器,都必须要写$(""),引号里面再写选择器,通过jQuery找到的标签对象就是一个jQuery对象,用原生JS找到的标签对象叫做DOM对象

    基本选择器(同css)    

id选择器:
$("#id")  
标签选择器:
$("tagName")
class选择器:
$(".className")
配合使用:
$("div.c1")  // 找到有c1 class类的div标签
所有元素选择器:
$("*")
组合选择器:
$("#id, .className, tagName")  

前端jQuery 随笔 第6张

    层级选择器:(同css)

x和y可以为任意选择器
$("x y");// x的所有后代y(子子孙孙)
$("x > y");// x的所有儿子y(儿子)
$("x + y")// 找到所有紧挨在x后面的y
$("x ~ y")// x之后所有的兄弟y

前端jQuery 随笔 第7张

    基本筛选器(选择之后进行过滤):

:first // 第一个
:last // 最后一个
:eq(index)// 索引等于index的那个元素
:even // 匹配所有索引值为偶数的元素,从 0 开始计数
:odd // 匹配所有索引值为奇数的元素,从 0 开始计数
:gt(index)// 匹配所有大于给定索引值的元素
:lt(index)// 匹配所有小于给定索引值的元素
:not(元素选择器)// 移除所有满足not条件的标签
:has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
$("div:has(h1)")// 找到所有后代中有h1标签的div标签,意思是首先找到所有div标签,把这些div标签的后代中有h1的div标签筛选出来
$("div:has(.c1)")// 找到所有后代中有c1样式类(类属性class='c1')的div标签
$("li:not(.c1)")// 找到所有不包含c1样式类的li标签
$("li:not(:has(a))")// 找到所有后代中不含a标签的li标签

前端jQuery 随笔 第8张

前端jQuery 随笔 第9张

    属性选择器:

[attribute]
[attribute=value]// 属性等于
[attribute!=value]// 属性不等于
// 示例,多用于input标签
<input type="text">
<input type="password">
<input type="checkbox">
$("input[type='checkbox']");// 取到checkbox类型的input标签
$("input[type!='text']");// 取到类型不是text的input标签

前端jQuery 随笔 第10张

    表单筛选器(多用于找form表单里面出现的input标签,当然通过属性选择器找肯定也是没问题的,这样就是写着简单一些)

:text
:password
:file
:radio
:checkbox

:submit
:reset
:button
示例:
$(":checkbox")  // 找到所有的checkbox
表单对象属性:

:enabled
:disabled
:checked
:selected
其他例子:
    找到可用的input标签

<form>
  <input name="email" disabled="disabled" />
  <input name="id" />
</form>

$("input:enabled")  // 找到可用的input标签
    找到被选中的option:

<select id="s1">
  <option value="beijing">北京市</option>
  <option value="shanghai">上海市</option>
  <option selected value="guangzhou">广州市</option>
  <option value="shenzhen">深圳市</option> 
</select>

$(":selected")  // 找到所有被选中的option

前端jQuery 随笔 第11张

  筛选器方法

    选择器或者筛选器选择出来的都是对象,而筛选器方法其实就是通过对象来调用一个进一步过滤作用的方法,写在对象后面加括号,不再是写在选择器里面的了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 100px;
            width: 100px;
        }
    </style>

</head>
<body>

<div class="c2">
    <div class="c3">
        <span class="c4">
            只要python学的好,媳妇年年再高考!
        </span>
    </div>
    <div class="c3">
        你好
    </div>
</div>
<div class="c5">
    哈喽
</div>
<div class="c6"><p>下面有个p1标签</p>
    <div>
        <p>下面有个p2标签</p>
    </div>
</div>


<div class="c7">
    <p>这是p3</p>
</div>


<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>


</script>

</body>
</html>

 

 下一个元素:

$("#id").next()
$("#id").nextAll()
$("#id").nextUntil("#i2") #直到找到id为i2的标签就结束查找,不包含它
 上一个元素:

$("#id").prev()
$("#id").prevAll()
$("#id").prevUntil("#i2")
 父亲元素:

$("#id").parent()
$("#id").parents()  // 查找当前元素的所有的父辈元素(爷爷辈、祖先辈都找到)
$("#id").parentsUntil('body') // 查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止,这里直到body标签,不包含body标签,基本选择器都可以放到这里面使用。
 儿子和兄弟元素:

$("#id").children();// 儿子们
$("#id").siblings();// 兄弟们,不包含自己,.siblings('#id'),可以在添加选择器进行进一步筛选
  查找

    搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。

$("div").find("p")    
等价于$("div p")
  筛选

    筛选出与指定表达式匹配的元素集合。这个方法用于缩小匹配的范围。用逗号分隔多个表达式。

$("div").filter(".c1")  // 从结果集中过滤出有c1样式类的,从所有的div标签中过滤出有class='c1'属性的div,和find不同,find是找div标签的子子孙孙中找到一个符合条件的标签
等价于 $("div.c1")
  补充(和前面使用冒号的一样  :first等,只不过冒号的那个是写在选择器里面的,而下面的这几个是方法):

.first() // 获取匹配的第一个元素
.last() // 获取匹配的最后一个元素
.not() // 从匹配元素的集合中删除与指定表达式匹配的元素
.has() // 保留包含特定后代的元素,去掉那些不含有指定后代的元素。
.eq() // 索引值等于指定值的元素

 前端jQuery 随笔 第12张

前端jQuery 随笔 第13张

前端jQuery 随笔 第14张

前端jQuery 随笔 第15张

  操作标签

    样式操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            background-color: red;
            height: 200px;
            width: 200px;
        }
        .c2{
            background-color: green;
        }

    </style>
</head>
<body>

<div class="c1">

</div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    
</script>
</body>
</html>

      样式类(添加删除class类的值来修改样式)

addClass();// 添加指定的CSS类名。
removeClass();// 移除指定的CSS类名。
hasClass();// 判断样式存不存在
toggleClass();// 切换CSS类名,如果有就移除,如果没有就添加。

       CSS(直接修改css的属性来修改样式)  

css("color","red")//DOM操作:tag.style.color="red"

      示例: 

$("p").css("color", "red"); //将所有p标签的字体设置为红色

前端jQuery 随笔 第16张

前端jQuery 随笔 第17张

    位置操作

offset()// 获取匹配元素在当前窗口的相对偏移或设置元素位置
position()// 获取匹配元素相对父元素的偏移,不能设置位置
$(window).scrollTop()  //滚轮向下移动的距离
$(window).scrollLeft() //滚轮向左移动的距离

      .offset()方法允许我们检索一个元素相对于文档(document)的当前位置。

      和 .position()的差别在于: .position()获取相对于它最近的具有相对位置(position:relative或position:absolute)的父级元素的距离,如果找不到这样的元素,则返回相对于浏览器的距离。

前端jQuery 随笔 第18张
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            margin: 0;
            padding: 0;
        }
        .c1{
            margin-top: 20px;
            margin-left: 20px;
            width: 100px;
            height: 100px;
            background-color: red;
        }
        .c2{
            width: 100px;
            height: 100px;
            background-color: green;
        }
        .cc{
            border: 1px solid red;
            margin-left: 100px;
            margin-top: 60px;
            position: relative;
        }
    </style>
</head>
<body>

<div class="cc">
    <div class="c1"></div>
    <div class="c2"></div>

</div>

</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>

</html>
演示代码

前端jQuery 随笔 第20张

前端jQuery 随笔 第21张

前端jQuery 随笔 第22张
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            height: 400px;
            background-color: red;
        }
        .c2{
            height: 400px;
            background-color: green;
        }
        .top{
            position:fixed;
            left: 40px;
            bottom:40px;
            background-color: orange;
            height: 40px;
            width: 60px;
        }
        .hide{
            display: none;
        }
    </style>
</head>
<body>

<div>顶部位置</div>
<div class="c1"></div>
<div class="c2"></div>
<div class="c1"></div>
<div class="c2"></div>

<span class="top hide">
    回到顶部
</span>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    $(window).scroll(function () {
        // console.log($(window).scrollTop());
        if ($(window).scrollTop() > 200){
            $('span').removeClass('hide');
        }else {
            $('span').addClass('hide');
        }

    });
    $('span').click(function () {
        $(window).scrollTop(0);
    });

</script>
</body>
</html>
滚轮示例:返回顶部

 

    尺寸:

height() //盒子模型content的大小,就是我们设置的标签的高度和宽度
width()
innerHeight() //内容content高度 + 两个padding的高度
innerWidth()
outerHeight() //内容高度 + 两个padding的高度 + 两个border的高度,不包括margin的高度,因为margin不是标签的,是标签和标签之间的距离
outerWidth()
前端jQuery 随笔 第24张
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            height: 100px;
            width: 100px;
            padding: 20px 10px;
            border: 2px solid red;
        }
    </style>
</head>
<body>

<div class="c1">
    哈哈
    <span>
        你好
    </span>
</div>

<div>
    用户名:<input type="text" id="username">
    性别选择:
    <input type="radio" name="sex" value="1"><input type="radio" name="sex" value="2">女

    爱好选择
    <input type="checkbox" name="hobby" value="1">抽烟
    <input type="checkbox" name="hobby" value="2">喝酒
    <input type="checkbox" name="hobby" value="3">烫头
    <input type="checkbox" name="hobby" value="4">说相声

    城市选择:
    <select name="" id="city">
        <option value="1">北京</option>
        <option value="2">上海</option>

    </select>


</div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

</script>
</body>
</html>
演示代码

前端jQuery 随笔 第26张

    文本操作

      HTML代码:

html()// 取得第一个匹配元素的html内容,包含标签内容
html(val)// 设置所有匹配元素的html内容,识别标签,能够表现出标签的效果

      文本值:

text()// 取得所有匹配元素的内容,只有文本内容,没有标签
text(val)// 设置所有匹配元素的内容,不识别标签,将标签作为文本插入进去

      值:

val()// 取得第一个匹配元素的当前值
val(val)// 设置所有匹配元素的值
val([val1, val2])// 设置多选的checkbox、多选select的值 

      设置值: 

$("[name='hobby']").val(['basketball', 'football']);
$("#s1").val(["1", "2"])

 前端jQuery 随笔 第27张

前端jQuery 随笔 第28张

前端jQuery 随笔 第29张

前端jQuery 随笔 第30张

    属性操作

前端jQuery 随笔 第31张
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #d1{
            background-color: red;
            height: 100px;
            width: 100px;
        }
    </style>
</head>
<body>

<div id="d1"></div>

<input type="checkbox" name="hobby" value="1">篮球
<input type="checkbox" name="hobby" value="2">足球
<input type="checkbox" name="hobby" value="3">羽毛球

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

</script>
</body>
</html>
演示代码

 

      用于ID自带属性等或自定义属性:

attr(attrName)// 返回第一个匹配元素的属性值
attr(attrName, attrValue)// 为所有匹配元素设置一个属性值
attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
removeAttr()// 从每一个匹配的元素中删除一个属性

      用于checkbox和radio

prop() // 获取属性

    注意:

      在1.x及2.x版本的jQuery中使用attr对checkbox进行赋值操作时会出bug,在3.x版本的jQuery中则没有这个问题。为了兼容性,我们在处理checkbox和radio的时候尽量使用特定的prop(),不要使用attr("checked", "checked")。

<input type="checkbox" value="1">
<input type="radio" value="2">
<script>
  $(":checkbox[value='1']").prop("checked", true);  //设置让其选中,设置选中或不选中的时候要注意传的参数那个true和false不能写成字符串形式'true'\'false' .prop('checked','true')是不对的
  $(":radio[value='2']").prop("checked", true);
</script>

      prop和attr的区别:

        attr全称attribute(属性) 

        prop全称property(属性)

        虽然都是属性,但他们所指的属性并不相同,attr所指的属性是HTML标签属性,而prop所指的是DOM对象属性,可以认为attr是显式的,而prop是隐式的。

      总结:

        1.对于标签上有的能看到的属性和自定义属性都用attr

        2.对于返回布尔值的比如checkbox、radio和option的是否被选中或者设置其被选中与取消选中都用prop。

           具有 true 和 false 两个属性的属性,如 checked, selected 或者 disabled 使用prop(),其他的使用 attr()

前端jQuery 随笔 第33张

前端jQuery 随笔 第34张

    文档处理

前端jQuery 随笔 第35张
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="d1">
    <span>你好</span>

</div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    
</script>
</body>
</html>
演示代码

 

      添加到指定元素内部的后面

$(A).append(B)// 把B追加到A
$(A).appendTo(B)// 把A追加到B

前端jQuery 随笔 第37张

前端jQuery 随笔 第38张

      添加到指定元素内部的前面

$(A).prepend(B)// 把B前置到A
$(A).prependTo(B)// 把A前置到B

前端jQuery 随笔 第39张

      添加到指定元素外部的后面

$(A).after(B)// 把B放到A的后面
$(A).insertAfter(B)// 把A放到B的后面

      添加到指定元素外部的前面

$(A).before(B)// 把B放到A的前面
$(A).insertBefore(B)// 把A放到B的前面

前端jQuery 随笔 第40张

      移除和清空元素

remove()// 从DOM中删除所有匹配的元素。
empty()// 删除匹配的元素集合中所有的子节点,包括文本被全部删除,但是匹配的元素还在

前端jQuery 随笔 第41张

前端jQuery 随笔 第42张

前端jQuery 随笔 第43张

前端jQuery 随笔 第44张

      替换

replaceWith()
replaceAll()

 前端jQuery 随笔 第45张

前端jQuery 随笔 第46张

      克隆

clone()

 前端jQuery 随笔 第47张

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<button class="btn">屠龙宝刀,点击就送</button>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
$('.btn').click(function () {
    var btnClone = $(this).clone(true); //
    $(this).after(btnClone);
})

</script>
</body>
</html>

 

  事件

    常用事件

click(function(){...})
hover(function(){...})
blur(function(){...})
focus(function(){...})
change(function(){...}) //内容发生变化,input,select等
keyup(function(){...})  
mouseover 和 mouseenter的区别是:mouseover事件是如果该标签有子标签,那么移动到该标签或者移动到子标签时会连续触发,mmouseenter事件不管有没有子标签都只触发一次,表示鼠标进入这个对象

      keydown和keyup事件(键盘按键按下和抬起的事件,还有一些其他的key事件)

前端jQuery 随笔 第48张
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .c1{
            border: 1px solid red;
            height: 200px;
            width: 200px;
        }
        .c2{
            background-color: yellow;
        }
        .c3{
            background-color: red;
        }

        .c4{
            border: 1px solid red;
            height: 200px;
            width: 200px;
        }
        .c5{
            background-color: blue;
            height: 60px;
            width: 60px;
        }
    </style>
</head>
<body>


<div class="c1">

</div>

<input type="text" id="username">

<select name="" id="s1">
    <option value="1">北京</option>
    <option value="2">上海</option>
    <option value="3">深圳</option>
</select>


<div class="c4">
    <div class="c5">

    </div>
</div>

<input type="text" id="i1">


<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
    $('.c1').hover(
        function () {
            $(this).addClass('c2')
        },
        function () {
            $(this).removeClass('c2')
        }
    );

    $('#username').focus(function () {
        $(this).addClass('c2')
    });

    $('#username').blur(function () {
        $(this).removeClass('c2')
    });


    $('#s1').change(function () {
         $('.c1').toggleClass('c3')
    });

    // $('.c4').mouseenter(function () {
    //     console.log('进来了')
    // });

    $('.c4').mouseover(function () {
        console.log('进来了')
    });

    // $('.c4').mouseout(function () {
    //     console.log('出去了')
    // })

    $(window).keydown(function (e) {
        // console.log('xxx')
        // console.log(e.keyCode);
        if (e.keyCode === 16){
            console.log('按下了shift键')
        }


    });
    $(window).keyup(function (e) {
        // console.log('xxx')
        // console.log(e.keyCode);
        if (e.keyCode === 16){
            console.log('松开了shift键')
        }

    });

    // 绑定事件的第二种方式,input事件只能on绑定
    $('#i1').on('input',function () {
        console.log($(this).val());

    })
    
</script>
</body>
</html>
演示

 

练习:

菜单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .title{
            background-color: deepskyblue;
            height: 40px;
            width: 200px;
        }
        .content div{
            height: 26px;
            width: 200px;
            font-size: 12px;
        }
        .hide{
            display: none;
        }

    </style>
</head>
<body>

<div class="menu1">
    <div class="title">凉菜</div>
    <div class="content hide">
        <div>老虎菜</div>
        <div>姜汁松花蛋</div>
        <div>黄瓜拉皮</div>
    </div>
</div>
<div class="menu2">
    <div class="title">热菜</div>
    <div class="content hide">
        <div>麻婆豆腐</div>
        <div>鱼香肉丝</div>
        <div>水煮肉片</div>
    </div>
</div>
<div class="menu3">
    <div class="title">主食</div>
    <div class="content hide">
        <div>米饭</div>
        <div>馒头</div>
        <div>烩饼</div>
    </div>
</div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>

    $('.title').on('click',function () {
        // $(this).next().toggleClass('hide').parent().siblings().children('.content').addClass('hide');
        $(this).next().removeClass('hide').parent().siblings().children('.content').addClass('hide');

    })

</script>
</body>
</html>

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄