1. 设置或获取元素固有属性值 prop()
所谓元素固有属性指的就是元素本身自带的属性,比如<a>元素里面的href,<input>元素里面的type,<img>里面的src等属性。
1.1 获取属性语法
element.prop('属性')
1.2 设置属性语法
element.prop('属性’, '属性值')
1.3 代码体验
<!-- 引入 jQuery 文件 --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> <body> <!-- HTML结构 --> <a href="https://www.baidu.com">跳转至百度</a> <!-- js 代码 --> <script> // 1. element.prop('属性') 获取当前属性的属性值 console.log($('a').prop('href')); // https://www.baidu.com/ // 2. element.prop('属性','属性值') 设置当前属性的属性值 $('a').prop('title', '开心就好'); // 设置鼠标移入出现的文字说明 </script> </body>
由于给<a>标签设置了固有属性title的值,所以鼠标移入后会出现下图效果:
2. 设置或获取元素自定义属性值 attr()
用户自己给元素添加的属性,称之为自定义属性。比如给div 添加index ="2"
2.1 获取属性语法
element.attr("属性") // 类似原生JS 中的 getAttribute()
2.2 设置属性语法
element.attr("属性", "属性值") // 类似原生JS 中的 setAttribute()
2.3 代码体验
<!-- 引入 jQuery 文件 --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> <body> <!-- HTML结构 --> <div index="2" data-index="4"></div> <a href="122"></a> <!-- js 代码 --> <script> // 注意:prop()无法获取到自定义属性的值 console.log($('div').prop('index')); // undefined // 1. element.attr('属性') 获取当前自定义属性的属性值 console.log($('div').attr('index')); // 2 // 2. element.attr('属性','属性值') 设置当前自定义属性的属性值 $('div').attr('index', '8'); // 3. attr()方法可以获取固有属性 console.log($('a').attr('href')); // 122 // 4. attr() 方法也可以获取H5自定义属性 data-xxx console.log($('div').attr('data-index')); // 4 </script> </body>
在利用attr("属性", "属性值") 重新设置了index的值后,可以在调试器中看到下图效果:
注意:自定义属性的值无法使用prop()获取,而要使用attr(). 但是attr()不仅可以获取自定义属性,也可以获取固有属性,但是我们一般获取固有属性还是使用prop()。attr()还可以获取H5自定义属性,即data-xxx的属性值。
3. 数据缓存 data()
data() 方法可以在指定的元素上存取数据,并不会修改DOM元素结构(也就是说存放的数据,在DOM树上是看不见的),而且一旦页面刷新,之前存放的数据都将被移除。
3.1 附加数据语法
element.data("name" , "value") // 给元素附加数据
3.2 获取数据语法
element.data("name") // 从元素中获取数据
3.3 代码体验
<!-- 引入 jQuery 文件 --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> <body> <!-- HTML结构 --> <div index="2" data-index="4"></div> <span></span> <!-- js 代码 --> <script> // 1. 缓存数据到span元素中 $('span').data("uname", "cindy"); // 2. 获取缓存数据 console.log($('span').data("uname")); // 3. 这个方法还可以获取H5自定义属性,而且不需要写data-,并且得到的是数字型 console.log($('div').data('index')); // 获得data-index的值--4 </script> </body>
注意:
① data()是给指定元素缓存数据,但是不修改DOM元素结构;
② data()方法 还可以获取H5自定义属性data-index的值,并且不需要写data- , 且得到的结果是数字型,使用attr()方法得到的 data-index的值是字符串型
4.案例-购物车全选功能
需求:
① 勾上全选则所有商品信息前的复选框勾上,取消全选,所有商品信息前的复选框也相应的取消选中;
② 如果所有商品信息前的复选框都勾上了,则全选按钮勾上,否则全选按钮不勾上
<!-- 引入 jQuery 文件 --> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script> <!-- css样式 --> <style> * { margin: 0; padding: 0; } .flex { display: flex; } .container { width: 1200px; margin: 100px auto; font-size: 14px; } /* 顶部title样式 */ .title { padding: 0 10px; margin-bottom: 15px; height: 50px; line-height: 50px; background-color: #f0f3f0; border: 1px solid #ccc; } .title .commodity { margin: 0 450px 0 100px; } .title .num { margin: 0 126px; } .title .operate { margin-left: 93px; } /* 商品详情样式 */ .item { padding: 20px 10px 50px; margin-top: -2px; color: #333; border-top: 2px solid #ccc; border-bottom: 2px solid #ccc; } .product { width: 370px; margin: 0 200px 0 30px; } .product img { float: left; vertical-align: top; padding: 5px; margin: 0 10px; border: 1px solid #ccc; } .count { margin: 0 80px; } .count div { width: 20px; height: 20px; text-align: center; border: 1px solid #ccc; } .count input { width: 50px; height: 20px; text-align: center; outline: none; border: none; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; } .total { margin-right: 80px; } .delete a { color: #333; text-decoration: none; } .delete a:hover { color: #369; text-decoration: underline; } /* 底部结算样式 */ .bottom { padding-left: 10px; margin-top: 15px; height: 50px; line-height: 50px; border: 1px solid #ccc; } .bottom .left { float: left; } .bottom .right { float: right; } .bottom .checked { margin: 0 30px 0 50px; } .right .check_num { color: #F15343; padding: 0 5px; } .right strong { color: #F15343; font-size: 18px; } .right .btn { margin-left: 8px; width: 100px; height: 50px; border: none; color: #fff; font-size: 18px; background-color: #F15343; } </style> <!-- HTML结构 --> <div class="container"> <!-- 顶部菜单信息 --> <div class="title"> <input type="checkbox" name="" class="checkAll"> 全选 <span class="commodity">商品</span> <span>单价</span> <span class="num">数量</span> <span>小计</span> <span class="operate">操作</span> </div> <!-- 商品详细信息 --> <div class="item flex"> <input type="checkbox" class="product_check"> <div class="product"> <img src="./img/p1.jpg" alt=""> <span>【5本32.9元】经典儿童文学彩图青少年版八十天环游地球中学生语文教学大纲</span> </div> <div class="price">¥12.60元</div> <div class="count flex"> <div>-</div> <input type="text" value="1"> <div>+</div> </div> <div class="total">¥12.60元</div> <div class="delete"> <a href="javascript:;">删除</a> </div> </div> <div class="item flex"> <input type="checkbox" class="product_check"> <div class="product"> <img src="./img/p2.jpg" alt=""> <span>【2000张贴纸】贴纸书 3-6岁 贴画儿童 贴画书全套12册 贴画 贴纸儿童</span> </div> <div class="price">¥25.90元</div> <div class="count flex"> <div>-</div> <input type="text" value="1"> <div>+</div> </div> <div class="total">¥25.90元</div> <div class="delete"> <a href="javascript:;">删除</a> </div> </div> <div class="item flex"> <input type="checkbox" class="product_check"> <div class="product"> <img src="./img/p3.jpg" alt=""> <span>唐诗三百首+成语故事全2册 一年级课外书 精装注音儿童版 小学生二三年级课外阅读书籍</span> </div> <div class="price">¥29.90元</div> <div class="count flex"> <div>-</div> <input type="text" value="1"> <div>+</div> </div> <div class="total">¥29.90元</div> <div class="delete"> <a href="javascript:;">删除</a> </div> </div> <!-- 底部结算信息 --> <div class="bottom"> <div class="left"> <input type="checkbox" name="" class="checkAll"> 全选 <span class="checked">删除选中的商品</span> <span class="clear">清理购物车</span> </div> <div class="right"> <span>已经选<span class="check_num">1</span>件商品</span> <span>总价:<strong>¥12.60</strong></span> <button class="btn">去结算</button> </div> </div> </div> <!-- js 代码 --> <script> $(function() { // 1. 全选 全不选功能模块 // 就是把全选按钮(checked)的状态赋值给 三个商品复选框(.product_check)就可以了 // 可以使用change事件 $(".checkAll").change(function() { // (1) 获取全选按钮的选中状态checked的值 let flag = $(this).prop("checked"); // (2) 把全选按钮checked的值,赋值给三个商品复选框以及另一个全选按钮的属性checked $(".product_check,.checkAll").prop("checked", flag); }); // 2. 商品复选框的选中状态反过来影响全选按钮 // (1) 给每个商品复选框绑定一个change事件 $(".product_check").change(function() { // (2) 如果被选中的商品复选框个数等于商品复选框个数,则选中全选按钮,否则不选中 if ($(".product_check:checked").length === $(".product_check").length) { $(".checkAll").prop("checked", true); } else { $(".checkAll").prop("checked", false); } }) }) </script> </body>
案例分析:
① 全选功能思路:里面3个商品信息复选框按钮的选中状态,是与全选按钮保持一致的
② 因为选中状态checked 是复选框的固有属性,所以需要利用prop() 方法来获取和设置
③ 把全选按钮选中状态值赋值给3个商品复选框就可以了;
④ 反过来实现全选按钮选中状态思路:当我们每次点击商品信息复选框时,就进行判断:
⑤ 如果商品信息复选框被选中的个数等于3(也就是商品复选框本身个数)时,就把全选按钮选上,否则不选上
⑥ :checked 选择器,可以用于查找被选中的表单元素