• jquery 购物车


    自己复习一下jquery,同时写了一个烂大街的素材 购物车 给大家分享下。
    在这里插入图片描述

    jquery

    jQuery对象是一个类数组的对象,含有连续的整形属性以及一系列的jQuery方法。它把所有的操作都包装在一个jQuery()函数中,形成了统一(也是惟一)的操作入口。
    其中我们用的非常频繁的一个函数是$()或者说是jQuery(),当我们调用他的时候会根据传入的参数的不同而达到不同的效果。

    1.$()或者是jQuery()

    1.1

    jQuery(selector,context):
    接收一个css选择器表达式(selector)和可选的选择器上下文(context),返回一个包含了匹配的DOM元素的jQuery对象。
    默认情况下,对匹配元素的查找都是从根元素ducument对象开始,也就是说查找范围是整棵文档树。但是如果给定了上下文context,则在指定上下文中查找.

     1   ps.
     2         <span>body span</span>
     3         <span>body span</span>
     4         <span>body span</span>
     5         <div class="wrap">
     6             <span>wrap span</span>
     7             <span>wrap span</span>
     8             <span>wrap span</span>
     9         </div>
    10 
    11         $('span').css('background-color','red');//所有的span都会变红
    12         $('span','.wrap').css('background-color','red');//只有.wrap中的span会变红

    1.2

    jQuery(html,ownerDocument) 、jQuery(html,props):
    用所提供的html创建dom元素。
    html参数是要创建的标签,可以是单标签也可以是多标签。
    第二个参数用于创建新DOM元素的文档对象,如果不传入则默认为当前的文档对象。

    1 //单标签  两种方式都可以往body中插入div
    2        
    3         $('<div>').appendTo('body');
    4         $('<div></div>').appendTo('body');  
    5          
    6         // 多标签嵌套
    7         $('<div><span>dfsg</span></div>').appendTo('body')

    appendTo() 方法在被选元素的结尾(仍然在内部)插入指定内容。
    同样也有其他方法在被选元素的头部,以及头部外部,尾部外部添加元素。

    1.3

    jQuery(element or elementsArray):
    如果传入一个DOM元素或者是DOM元素的数组,则把DOM元素封装到jQuery对象中并返回。

     1 <ul>
     2             <li>1</li>
     3             <li>2</li>
     4             <li>3</li>
     5             <li>4</li>
     6             <li>5</li>
     7         </ul>
     8 
     9          // 传入DOM元素
    10          $('li').each(function(index,ele){
    11                 $(ele).on('click',function(){
    12                     $(this).css('background','red');//这里的DOM元素就是this
    13                 })
    14         })
    15         
    16         //传入DOM数组
    17         var aLi=document.getElementsByTagName('li');
    18             aLi=[].slice.call(aLi);//集合转数组
    19             var $aLi=$(aLi);
    20             $aLi.html('我是jQuery对象');//所有的li的内容都变成'我是jQuery对象'

    1.4

    jQuery(object):
    如果传入的是一个object对象,则把该对象封装到jQuery对象中并返回。

    1 var obj={name:'谦龙'};
    2         var $obj=$(obj);//封装成jQuery对象
    3         //绑定自定义事件
    4         $obj.on('say',function(){
    5             console.log(this.name)//输出谦龙
    6         });
    7         $obj.trigger('say')

    1.5

    jQuery(callback):
    当传进去的参数是函数的时候,则在document对象上绑定一个ready事件监听函数,当DOM结构加载完成的时候执行。

    1  $(function(){
    2     
    3         })
    4         //以上代码和下面的效果是一样的
    5         $(document).ready(function(){
    6             ...//代码
    7         })

    1.6

    jQuery(jQuery object):
    当传进去的参数是一个jQuery对象的时候,则创建该jQuery对象的一个副本并返回。副本与传入的jQuery对象引用完全相同的元素。

    1 var aLi=$('li');
    2         var copyLi=$(aLi);//创建一个aLi的副本
    3         console.log(aLi);
    4         console.log(copyLi);
    5         console.log(copyLi===aLi);

    1.7

    jQuery():
    如果不传入任何的参数,则返回一个空的jQuery对象,属性length为0。
    注意这个功能可以用来复用jQuery对象,例如可以创建一个空的jQuery对象,然后在需要的时候先手动修改其中的元素,然后在调用jQuery方法。从而避免重复创建jQuery对象。

    2. :gt()

    :gt 选择器选取 index 值高于指定数的元素。
    ps.
    $(‘tr:gt(0)’):选取下表为0 之后所有的tr元素。
    扩展:
    :lt 选择器来选取 index 值小于指定数的元素。

    3. each()

    each() 方法规定为每个匹配元素规定运行的函数。
    通俗来讲就是循环便利,相当于是for,foreach.

     1 $('tr:gt(0)').each(function () {
     2          console.log(this);
     3          这里的this指向的是循环遍历的每一个tr 下的 td;
     4             ps.
     5                 输出结果:
     6                         <td width="150px">31</td>
     7                         <td width="150px">iphhone</td>
     8                         <td width="300px">
     9                             <button>-</button>
    10                             <input type="text" value="0">
    11                             <button>+</button>
    12                         </td>
    13                         <td width="150px">$4000</td>
    14                         <td width="150px">0</td>
    15                         <td width="150px"><a class="a">移除</a></td>
    16          可以说是指向当前调用者;
    17      })

    4. find()

    find() 方法返回被选元素的后代元素。

    $(this).find('td:eq(2)')
    

    4.1

    eq():
    :eq() 选择器选取带有指定 index 值的元素。
    在 第3部 $(this) 拿到每一个tr下面的所有td之后
    .find(‘td:eq(2)’) 去查找第三个td

    5. children()

    children() 方法返回返回被选元素的所有直接子元素,也就是说第一代子级

    5.1

    children()和find()的区别
    children():只返回儿子一级的子元素
    find():返回所有后代

    6. first() last()

    first():返回第一个匹配到的元素
    last():返回最后一个匹配到的元素

    7. 拿到加减号给加减号添加点击事件
    7.1

    $(this).find(‘td:eq(2)’).children().first()
    拿到tr下的第三个td找到里边的子元素获取到第一个元素 减号 添加点击事件

    <td width="300px">
                <button>-</button>
                <input type="text" value="0">
                <button>+</button>
            </td>

    7.2

    $(this).find(‘td:eq(2)’).children().last()
    拿到tr下的第三个td找到里边的子元素获取到最后一个元素 加号 添加点击事件

     <td width="300px">
                <button>-</button>
                <input type="text" value="0">
                <button>+</button>
            </td>

    8. next() prev()

    8.1

    next(): 方法返回被选元素的后一个同级元素
    prev(): 获得匹配元素集合中每个元素紧邻的前一个同胞元素,通过选择器进行筛选是可选的。

    8.2

    $(this).next().val(); $(this).next().prev();
    在加号减号分别拿到input里商品数量,进行商品数量操作。

    9. val() text()
    9.1

    val()
    方法返回或设置被选元素的值。
    元素的值是通过 value 属性设置的。该方法大多用于 input 元素。

    9.2

    text()
    方法设置或返回被选元素的文本内容。
    当该方法用于返回内容时,则返回所有匹配元素的文本内容(会删除 HTML 标记)。
    当该方法用于设置内容时,则重写所有匹配元素的内容。

    9.3

    html():补充
    方法设置或返回被选元素的内容(innerHTML)。
    当该方法用于返回内容时,则返回第一个匹配元素的内容。
    当该方法用于设置内容时,则重写所有匹配元素的内容。

    9.4

    text() html() 区别:
    一个是操作文本内容,一个是操作元素内容。

    10. 加减事件
    10.1
    加号事件
    10.1.1

    通过$(this).prev().val();拿到加号上一个元素,也就是input商品数量的值,进行 加1
    然后商品数量加了之后,
    要给input重新赋值,
    要重新计算商品的总价以及购物车的总金额

    1 jia.click(function () {
    2                 var num = $(this).prev().val();
    3                 num++;
    4                 $(this).prev().val(num);//给input重新赋值
    5                 total($(this));//调用购物车总金额函数
    6                 allmoney();//调用购买商品总价函数
    7             })

    10.2
    减号事件
    10.2.1

    通过$(this).next().val();拿到加号下一个元素,也就是input商品数量的值,进行 加1
    然后商品数量加了之后,
    要给input重新赋值,
    要重新计算商品的总价以及购物车的总金额

     1   jian.click(function () {
     2                 var num = $(this).next().val();
     3                 num--;
     4                 if (num < 0) {
     5                     num = 0;
     6                     if (confirm("已经是0件了你确定要删除这件商品吗") == true) {
     7                         $(this).parent().parent().remove();
     8                     }
     9                 }
    10                 $(this).next().val(num);
    11                 total($(this));
    12                 allmoney();
    13             })

    10.2.2

    confirm()
    方法用于显示一个带有指定消息和确认及取消按钮的对话框。
    如果访问者点击"确定",此方法返回true,否则返回false。

    11. parent()

    方法返回被选元素的直接父元素。该方法只沿着 DOM 树向上遍历单一层级。

    11.1

    parents():方法返回被选元素的所有祖先元素。
    祖先是父、祖父、曾祖父,依此类推。
    该方法从父元素向上遍历 DOM 元素的祖先,直至文档根元素的所有路径()。
    注意:
    如果 filter 参数为空,该方法将从直接父元素直至 和 的所有路径中选取元素集合中的所有祖先。因此传递一个缩小搜索结果范围的选择器表达式是非常有用的。

    11.2

    closest(): 方法返回被选元素的第一个祖先元素。
    祖先是父、祖父、曾祖父,依此类推。
    该方法从当前元素向上遍历,直至文档根元素的所有路径(),来查找 DOM 元素的第一个祖先元素。

    11.2.1

    parents()closest() 的不同
    parents()
    从父元素开始
    沿 DOM 树向上遍历,并返回匹配所传递的表达式的所有祖先
    返回包含零个、一个或多个元素的 jQuery 对象
    closest()
    从当前元素开始
    沿 DOM 树向上遍历,并返回匹配所传递的表达式的第一个祖先
    返回包含零个或一个元素的 jQuery 对象

    11.3

    parentsUntil():方法返回介于 selector 与 stop 之间的所有祖先元素。
    该方法从父元素向上遍历 DOM 元素的祖先,直至文档根元素的所有路径,直到到达指定的元素为止。
    注意:
    如果两个参数都为空,该方法将返回所有祖先元素(与 parents() 方法相同)。

    .parentsUntil(stop,filter)

    12. substr()

    方法可在字符串中抽取从 start 下标开始的指定数目的字符。

    返回值:

    一个新的字符串,包含从 stringObject 的 start(包括 start 所指的字符) 处开始的 length
    个字符。如果没有指定 length,那么返回的字符串包含从 start 到 stringObject 的结尾的字符。

    13. remove()

    方法移除被选元素,包括所有的文本和子节点。
    该方法也会移除被选元素的数据和事件。

    13.1

    detach()
    方法移除被选元素,包括所有的文本和子节点。然后它会保留数据和事件。
    该方法会保留移除元素的副本,允许它们在以后被重新插入。

    13.2

    empty()
    方法移除被选元素的所有子节点和内容。
    该方法不会移除元素本身,或它的属性。

    14. :not()

    方法返回不符合一定条件的元素。
    该方法让您规定一个条件。不符合条件的元素将从选择中返回,符合条件的元素将被移除。
    该方法通常用于从被选元素组合中移除一个或多个元素。

    14.1

    filter()
    方法返回符合一定条件的元素。
    该方法让您规定一个条件。不符合条件的元素将从选择中移除,符合条件的元素将被返回。
    该方法通常用于缩小在被选元素组合中搜索元素的范围。
    tr:not(:first):not(:last):
    返回除了第一个和最后一个的tr元素集合。

    15. 计算单个商品总价 计算总购买价

    15.1
    单个商品总价

     1  //商品单个总价
     2     function total(o) {
     3         // 参数o 加减调用时所传的当前的元素集合
     4         var n = o.parent().children().first().next().val();
     5         // n 代表的是找到o,也就是说找到加号或者是减号的  parent父级元素 的 children儿子元素 的 first第一个元素的 next下一个元素 的 val值
     6         // 也就是说拿到input框里的商品数量
     7         var money = Number(o.parent().next().text().substr(1));
     8         // money 代表的是 o 父级的下一个元素的text文本 然后通过substr拿到商品单个价格  也就是¥2000
     9         o.parent().next().next().text(n * money);
    10         //最后找到 展示总价的td,计算出总价之后赋值。
    11     }

    15.2
    计算所有商品的总价

     1  //总购买价 
     2         function allmoney() {
     3             var num = 0;
     4             $('tr:not(:first):not(:last)').each(function () {
     5                 // tr:not(:first):not(:last) 这里的意思就是除了第一个tr 和 最后一个tr 去循环
     6                 //因为这里的第一个tr和最后一个tr是表头和表尾
     7                 num += Number($(this).find('td:eq(4)').text());
     8                 //最后就是把所有的tr里面第五个td的文本 也就是单个商品的总价 相加计算出 所有总价
     9             })
    10             $('tr:last').children().first().next().text(num);
    11             // 最后找到最后一个tr里的儿子元素的第二个元素 设置文本内容  也就是总价。
    12         }

    16. 删除商品

    16.1

    拿到当前要删除商品的总价
    $(this).parent().prev().text();

    16.2

    拿到购物车总价
    $(‘tr:last’).children().first().next().text();

    16.3

    最后用购物车总价减去单个商品的总价,重新给购物车总价赋值
    $(‘tr:last’).children().first().next().text(b-a);
    然后删除整条元素
    $(this).parent().parent().remove();

    17. 清除购物车

    17.1

    删除所有商品
    $(‘tr:not(:first):not(:last)’).remove();
    这里是除了第一个tr和最后一个tr,其余的tr元素全部删除,
    操作dom,来改变购物车展示的内容。

    17.2

    清空总价数据为0
    $(‘tr:last’).children().first().next().text(‘0’);

    总结:

    1.jquery 实际操作dom
    2.涉及原生方法
    3.购物车逻辑
    3.1 添加商品,增加商品数量,增加单个商品总价,同时增加总金额
    3.2 减少商品,减少商品数量,减少单个商品总价,同时减少总金额
    当商品数量小于0时移除商品
    3.3 删除商品,减少商品总价
    3.4 清空购物车,总金额变为0
    4.this指向
    方法中的所有this均指向当前调用者
    5.最后总结一下子,基础其实很重要。

    大最后给大家附上源码:

      1 <!DOCTYPE html>
      2 <html>
      3 
      4 <head>
      5     <meta charset="UTF-8">
      6     <title></title>
      7 </head>
      8 <style type="text/css">
      9     td {
     10         text-align: center;
     11         height: 50px;
     12         border-bottom: 1px solid gray;
     13     }
     14 
     15     a {
     16         padding: 5px 10px;
     17         background: red;
     18         color: #fff;
     19         font-weight: bold;
     20         border-radius: 5px;
     21         text-align: center;
     22     }
     23 
     24     tr:last-child td {
     25         border: none;
     26     }
     27 </style>
     28 
     29 <body>
     30     <table cellspacing="0" cellpadding="0">
     31         <tr>
     32             <td width="150px">产品编号</td>
     33             <td width="150px">产品名字</td>
     34             <td width="300px">产品数量</td>
     35             <td width="150px">单价</td>
     36             <td width="150px">总价</td>
     37 
     38         </tr>
     39         <tr>
     40             <td width="150px">31</td>
     41             <td width="150px">iphhone</td>
     42             <td width="300px">
     43                 <button>-</button>
     44                 <input type="text" value="0">
     45                 <button>+</button>
     46             </td>
     47             <td width="150px">$4000</td>
     48             <td width="150px">0</td>
     49             <td width="150px"><a class="a">移除</a></td>
     50         </tr>
     51         <tr>
     52             <td width="150px">52</td>
     53             <td width="150px">NOKIA</td>
     54             <td width="300px">
     55                 <button>-</button>
     56                 <input type="text" value="0">
     57                 <button>+</button>
     58             </td>
     59             <td width="150px">$2000</td>
     60             <td width="150px">0</td>
     61             <td width="150px"><a class="a">移除</a></td>
     62         </tr>
     63         <tr>
     64             <td width="150px">77</td>
     65             <td width="150px">Samng</td>
     66             <td width="300px">
     67                 <button>-</button>
     68                 <input type="text" value="0">
     69                 <button>+</button>
     70             </td>
     71             <td width="150px">$1000</td>
     72             <td width="150px">0</td>
     73             <td width="150px"><a class="a">移除</a></td>
     74         </tr>
     75         <tr>
     76             <td width="150px">23</td>
     77             <td width="150px">qq</td>
     78             <td width="300px">
     79                 <button>-</button>
     80                 <input type="text" value="0">
     81                 <button>+</button>
     82             </td>
     83             <td width="150px">$3000</td>
     84             <td width="150px">0</td>
     85             <td width="0px"><a class="a">移除</a></td>
     86         </tr>
     87         <tr>
     88             <td width="150px">总购买价</td>
     89             <td width="150px">0</td>
     90             <td width="300px"></td>
     91             <td width="150px"></td>
     92             <td width="0px"><a id="qingchu">清空购物车</a></td>
     93             <td width="150px"></td>
     94         </tr>
     95     </table>
     96 </body>
     97 <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
     98 <script type="text/javascript">
     99     $('tr:gt(0)').each(function () {
    100         var jian = $(this).find('td:eq(2)').children().first()
    101         var jia = $(this).find('td:eq(2)').children().last()
    102         //            减点击事件
    103         jian.click(function () {
    104             var num = $(this).next().val();
    105             num--;
    106             if (num < 0) {
    107                 num = 0;
    108                 if (confirm("已经是0件了你确定要删除这件商品吗") == true) {
    109                     $(this).parent().parent().remove();
    110                 }
    111             }
    112             $(this).next().val(num);
    113             total($(this));
    114             allmoney();
    115         })
    116         //加点击事件
    117         jia.click(function () {
    118             var num = $(this).prev().val();
    119             num++;
    120             $(this).prev().val(num);
    121             total($(this));
    122             allmoney();
    123         })
    124     })
    125     //商品单个总价
    126     function total(o) {
    127         var n = o.parent().children().first().next().val();
    128         var money = Number(o.parent().next().text().substr(1));
    129         o.parent().next().next().text(n * money);
    130     }
    131     //总购买价 
    132     function allmoney() {
    133         var num = 0;
    134         $('tr:not(:first):not(:last)').each(function () {
    135             num += Number($(this).find('td:eq(4)').text());
    136         })
    137         $('tr:last').children().first().next().text(num);
    138     }
    139     //删除
    140     $('.a').click(function () {
    141         let a=$(this).parent().prev().text();//当前商品的总价
    142         let b=$('tr:last').children().first().next().text();//购物车的总价
    143         $('tr:last').children().first().next().text(b-a);
    144         $(this).parent().parent().remove();
    145     })
    146     //清除购物车
    147     $('#qingchu').click(function () {
    148         $('tr:not(:first):not(:last)').remove();
    149         $('tr:last').children().first().next().text('0');
    150     })
    151 </script>
    152 
    153 </html>
  • 相关阅读:
    用webview打开网页时,里面有个div带滚动条的,但是在平板上滚动条失效
    PHP获取日期
    iScroll滚动区域中select、input、textarea元素无法点击的Bug修复
    用PHP获取系统时间时,时间比当前时间少8个小时
    kindeditor-4.1.7应用
    PHP连接SQLServer
    PHP常见方法
    APPLICATION ERROR #1502 .
    JSP 简介
    转发和重定向的区别与联系
  • 原文地址:https://www.cnblogs.com/zjmx/p/11936978.html
Copyright © 2020-2023  润新知