修改:在购物车显示数量一栏没有文本居中(只需添加两步):

step1:在新增的div中的input增加一个类

"<input type='text' size='3' readonly value='1' class='inputTextCenter'/> "+

step2:在CSS样式为类添加样式

.inputTextCenter{
    text-align: center;
}
即可input文本居中。

源码:(细节讲解都在里面)直接贴出html/css和JavaScript代码块:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jquery实现小米购物车案例</title>
    <script src="jquery-3.3.1.js"></script>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        h1{
            text-align: center;
            color: #FF6700;
        }
        table{
            margin: 0 auto;
            width: 80%;
            border: 2px solid whitesmoke;
            /*设置表格的合并为单线*/
            border-collapse: collapse;
        }
        table th, table td{
            border: 2px solid whitesmoke;
            padding: 5px;
            text-align: center;
        }
        table th{
            background-color: #FF6700;
            color: #FFFFFF;
        }
        /*总计的样式*/
        table tfoot tr td:first-child {
            font-weight: bold;
            text-align: center;
        }
    </style>
</head>
<body>
<div>
    <img src="Img_MI/mi.png" alt="">
</div>
<h1>小米商城购物车</h1>>
<table>
    <!--用长表格实现布局-->
    <thead>
    <tr>
        <th>商品</th>
        <th>单价(元)</th>
        <th>数量</th>
        <th>金额(元)</th>
        <th>删除</th>
    </tr>
    </thead>
    <tbody id="goods">

    </tbody>
    <tfoot>
    <tr>
        <td colspan="3" >总计</td>
        <td id="total"></td>
        <td></td>
    </tr>
    </tfoot>
</table>
<br/>
<br/>
<h1>小米商城</h1>
<table id="table1">
    <tr>
        <th>商品</th>
        <th>单价(元)</th>
        <th>颜色</th>
        <th>库存</th>
        <th>好评率</th>
        <th>操作</th>
    </tr>
    <tr>
        <td>阿玛尼T恤</td>
        <td>100</td>
        <td>黑色</td>
        <td>30</td>
        <td>99%</td>
        <td align="center">
            <input type="button" value="放入购物车" onclick="add_shoppingcart(this);"/>
        </td>
    </tr>
    <tr>
        <td>PUMA亚洲挂带</td>
        <td>250</td>
        <td>红色</td>
        <td>100</td>
        <td>100%</td>
        <td align="center">
            <input type="button" value="放入购物车" onclick="add_shoppingcart(this);"/>
        </td>
    </tr>
    <tr>
        <td>瑞士军刀</td>
        <td>168</td>
        <td>黑色</td>
        <td>6</td>
        <td>88%</td>
        <td align="center">
            <input type="button" value="放入购物车" onclick="add_shoppingcart(this)"/>
        </td>
    </tr>
    <tr>
        <td>大哥大</td>
        <td>550</td>
        <td>金色</td>
        <td>30</td>
        <td>99%</td>
        <td align="center">
            <input type="button" value="放入购物车" onclick="add_shoppingcart(this);"/>
        </td>
    </tr>

</table>
<br/>
<br/>
<br/>
<div>
    <img src="Img_MI/buttom.png"  width="1350px" alt="">
</div>
<script>
    //jQuery入口函数
   /* $(function () {*/
        console.log("qq");

        //第一步:去增加到购物车的按钮点击函数
        function add_shoppingcart(btn) {
            console.log("qq12");
            //传递过来的btn是dom元素,先全部转为jQuery元素,多次用到tds
            var $tds = $(btn).parent().siblings();
            //获取到商品的名字价格和库存信息,string类型
            var name=$tds.eq(0).html();
            var price=$tds.eq(1).html();
            var stock=$tds.eq(3).html();

            //先查看库存是否为0,为0不允许点击事件的发生
            if(stock <= 0){
                return;
            }

            //当点击了放入购物车后,库存减掉1
            $tds.eq(3).html(--stock);

            //添加操作
            //判断之前有无添加,有则是数量加1,否则创建一个tr行
            //购物车表单的tr行
            var $trs = $("#goods>tr");
            console.log($trs.length);
            for(var i=0;i<$trs.length;i++){
                var $goodstds = $trs.eq(i).children();  //找到购物车表单所有的行中的所有单元格(列)
                var goodsname =  $goodstds.eq(0).html();  //找到商品名称
                //name(在商城表格中)是表示点击了加入购物车的那个名字,goodsname表示已经存在购物车的名字
                if(name == goodsname){   //若存在,就是数量加1
                    var num=parseInt($goodstds.eq(2).children().eq(1).val()); //获得num
                    $goodstds.eq(2).children().eq(1).val(++num);  //num+1
                    console.log("aaa");
                    //单项金额重新计算,并修改
                    //这个price是商城表格的price,因为是一样的价格,没必要在购物车的价格上获取
                    $goodstds.eq(3).html(price*num);

                    //总计功能
                    total();

                    return; //  如果存在就直接增加金额操作,后面的创建追加元素不要执行
                }
            }

            //若不存在,则创建一个并追加,并且这里面的数值就是1的price name等等,不用计算哦
            var div= "<tr>"+
                "<td>"+name+"</td>"+
                "<td>"+price+"</td>"+
                "<td align='center'>"+
                "<input type='button' value=' ▼ ' onclick='decrease(this);'/> "+
                "<input type='text' size='3' readonly value='1' align='center'/> "+
                "<input type='button' value=' ▲ ' onclick='increase(this);'/>"+
                "</td>"+
                "<td>"+price+"</td>"+
                "<td align='center'>"+
                "<input type='button' value=' ✘ ' onclick='del(this);'/>"+
                "</td>"+
                "</tr>";
            console.log("bbb");
            //追加到#goods后面
            $("#goods").append(div);

            //总计功能
            total();

        }
        /*----------第一步点击函数工作结束-------------*/

        /*总计功能的函数total*/
        function total() {
            //获取所有的购物车里头的trS
            var $trs = $("#goods tr");
            var amount = 0;
            //遍历所有tr
            for(var i=0;i<$trs.length;i++){
                //获取每个商品的总价,先防止数据精度,先用整数计
                var money =parseInt($trs.eq(i).children().eq(3).html());
                //所有商品的总价相加就是total值
                amount += money;
            }
            //值给总计表格单元格
            $("#total").html(amount);
        }
        /*-------------总计函数结束----------------*/

        /*增加数量中的+的功能函数
        * 增加了一个后,相应购物车的数据会改变;商城数量也会改变
        * 第一步处理商城的数量减掉1(要先找到在商城的对应产品,所以先找到这个td)
        * 第二步处理购物更新数据,这边很多数据会更新,数量加1,总价变了,购物车total会变
        * */
        //这个btn就是那边的额this
        function increase(btn) {
            //先判断库存是否为0了已经
            var $stock = findstock(btn);
            var stock = $stock.html();
            if(stock <= 0){
                return ;
            }

            //否则库存-1
            $stock.html(--stock);

            //更新购物车一系列的数据
            var $td = $(btn).prev();    //找到上一个数量的兄弟
            var num = parseInt($td.val());
            $td.val(++num);   //num为number类型,这里是用val()
            //获取单价,在计算总计
            var price = parseInt($(btn).parent().prev().html()); //这里找了bug很久,这里使用html和val要区别看清楚,有哪个才用那个
            $(btn).parent().next().html(num * price);
            //重新总计
            total();
        }
        /*-----------增加函数结束-----------------*/


        /*减少数量中的+的功能函数
        * 减少了一个后,相应购物车的数据会改变;商城数量也会改变
        * 第一步处理商城的数量加1(要先找到在商城的对应产品,所以先找到这个td)
        * 第二步处理购物更新数据,这边很多数据会更新,数量减掉1,总价变了,购物车total会变
        * */
        //这个btn就是那边的额this
        function decrease(btn) {
            //先判断商城的商品是否已经为1,为1 设置不能减,只能删
            var num = parseInt($(btn).next().val());
            if(num<=1){
                return ;
            }

            var $stock = findstock(btn);
            //库存+1
            var stock = parseInt($stock.html());
            $stock.html(++stock);

            //更新购物车一系列的数据
            //商城商品数量-1
            $(btn).next().val(--num);
            //获取单价,在计算总计
            var price = parseInt($(btn).parent().prev().html()); //这里找了bug很久,这里使用html和val要区别看清楚,有哪个才用那个
            $(btn).parent().next().html(num * price);
            //重新总计
            total();
        }
        /*-----------减少函数结束-----------------*/

        /*删除函数开始
        * 要做的就是将数量归还给库存
        * 然后整个清空tr
        * */
        function del(btn) {
            //归还数量操作
            var $stock = findstock(btn);
            var stocknum = parseInt($stock.html());
            var shoppingcartnum = parseInt($(btn).parent().prev().prev().children().eq(1).val());
            $stock.html(stocknum+shoppingcartnum);

            //清空商品的tr, remove()自杀:事件数据都会消失
            $(btn).parent().parent().remove();

            //重新计算总计功能
            total();
        }
        /*-------del函数结束---------*/

        /*增加减少删除函数所需要获取的那个对象,在点击这些时,是在购物车的表格table中的,
        * 但是我们在获取这些增删减的动作是要去处理库存的那边信息的
        * 所以,这个函数就会返回一个jQuery对象,
        * 让我们操作的购物车的元素和相应商品的那个库存里的td元素可以找到
        * 这就是他们之间的一个联系和桥梁作用
        * 在找的过程有点像回溯递归的感觉,大家可以体会一下
        * */
        function findstock(btn) {
            var name = $(btn).parent().siblings().eq(0).html(); //name是购物车table的name
            //得到商城的库存的所有tr,注意,这里少了tbody是找不到tr
            var $trs = $("#table1 tbody tr:gt(0)");
            for(var i=0;i<$trs.length;i++){

                var stockname = $trs.eq(i).children().eq(0).html(); //找到相应i的name
                if(name == stockname){
                    //找到了点击的商品和库存table中相对于的商品了
                    return $trs.eq(i).children().eq(3);  //f返回库存的那个td!!很重要,这样就可以直接库存表格里的库存信息
                }
            }
        }
        /*-------------获取库存的td(JQUERY对象)函数结束-----------------*/

/*
    });*/
</script>
</body>
</html>


相关标签: jQuery实现购物车

上一篇: 关于静态注册BroadcastReceiver接收不到非系统广播的问题

下一篇: WTL 绘制 圆角对话框 自绘对话框

推荐阅读