html

<div class="catbox">
<table id="cartTable">
<thead>
<tr>
<th><label>
<input class="check-all check" type="checkbox">&nbsp;&nbsp;全选</label></th>
<th>商品</th>
<th>单价</th>
<th>数量</th>
<th>小计</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr class="on">
<td class="checkbox"><input class="check-one check" type="checkbox"></td>
<td class="goods"><img src="" alt=""><span>Casio/卡西欧 EX-TR350</span></td>
<td class="price">5999.88</td>
<td class="count"><span class="reduce"></span>
<input class="count-input" type="text" value="">
<span class="add">+</span></td>
<td class="subtotal">5999.88</td>
<td class="operation"><span class="delete">删除</span></td>
</tr>
<tr class="on">
<td class="checkbox"><input class="check-one check" type="checkbox"></td>
<td class="goods"><img src="" alt=""><span>Canon/佳能 PowerShot SX50 HS</span></td>
<td class="price">3888.50</td>
<td class="count"><span class="reduce"></span>
<input class="count-input" type="text" value="">
<span class="add">+</span></td>
<td class="subtotal">3888.50</td>
<td class="operation"><span class="delete">删除</span></td>
</tr>
<tr class="on">
<td class="checkbox"><input class="check-one check" type="checkbox"></td>
<td class="goods"><img src="" alt=""><span>Sony/索尼 DSC-WX300</span></td>
<td class="price">1428.50</td>
<td class="count"><span class="reduce"></span>
<input class="count-input" type="text" value="">
<span class="add">+</span></td>
<td class="subtotal">1428.50</td>
<td class="operation"><span class="delete">删除</span></td>
</tr>
<tr class="on">
<td class="checkbox"><input class="check-one check" type="checkbox"></td>
<td class="goods"><img src="" alt=""><span>Fujifilm/富士 instax mini </span></td>
<td class="price">640.60</td>
<td class="count"><span class="reduce"></span>
<input class="count-input" type="text" value="">
<span class="add">+</span></td>
<td class="subtotal">640.60</td>
<td class="operation"><span class="delete">删除</span></td>
</tr>
</tbody>
</table>
<div class="foot" id="foot">
<label class="fl select-all"><input type="checkbox" class="check-all check">&nbsp;&nbsp;全选</label>
<a class="fl delete" id="deleteAll" href="javascript:;">删除</a>
<div class="fr closing" onclick="getTotal();">结 算</div>
<input type="hidden" id="cartTotalPrice">
<div class="fr total">合计:¥<span id="priceTotal">11957.48</span></div>
<div class="fr selected" id="selected">已选商品<span id="selectedTotal"></span>件<span class="arrow up">︽</span><span class="arrow down">︾</span></div>
<div class="selected-view">
<div id="selectedViewList" class="clearfix"><div><img src="http://www.jq22.com/demo/jquery-guc20151105/images/1.jpg"><span class="del" index="">取消选择</span></div><div><img src="http://www.jq22.com/demo/jquery-guc20151105/images/2.jpg"><span class="del" index="">取消选择</span></div><div><img src="http://www.jq22.com/demo/jquery-guc20151105/images/3.jpg"><span class="del" index="">取消选择</span></div><div><img src="http://www.jq22.com/demo/jquery-guc20151105/images/4.jpg"><span class="del" index="">取消选择</span></div></div>
<span class="arrow">◆<span>◆</span></span> </div>
</div>
</div>

css

<style type="text/css">
*{margin:;padding:;list-style-type:none;}
a{color:#;text-decoration:none;}
table{border-collapse:collapse;border-spacing:;border:;}
body{color:#;font:12px/% Arial, Helvetica, sans-serif, "新宋体";}
clearfix:after{content:".";display:block;height:;clear:both;visibility:hidden}
.clearfix{display:inline-table}
*html .clearfix{height:%}
.clearfix{display:block}
*+html .clearfix{min-height:%}
.fl{float:left;}
.fr{float:right;}
.catbox{width:940px;margin:100px auto;}
.catbox table{text-align:center;width:%;}
.catbox table th,.catbox table td{border:1px solid #CADEFF;}
.catbox table th{background:#e2f2ff;border-top:3px solid #a7cbff;height:30px;}
.catbox table td{padding:10px;color:#;}
.catbox table tbody tr:hover{background:RGB(,,);}
.checkbox{width:60px;}
.check-all{ vertical-align:middle;}
.goods{width:300px;}
.goods span{width:180px;margin-top:20px;text-align:left;float:left;}
.goods img{width:100px;height:80px;margin-right:10px;float:left;}
.price{width:130px;}
.count{width:90px;}
.count .add, .count input, .count .reduce{float:left;margin-right:-1px;position:relative;z-index:;}
.count .add, .count .reduce{height:23px;width:17px;border:1px solid #e5e5e5;background:#f0f0f0;text-align:center;line-height:23px;color:#;}
.count .add:hover, .count .reduce:hover{color:#f50;z-index:;border-color:#f60;cursor:pointer;}
.count input{width:50px;height:25px;line-height:15px;border:1px solid #aaa;color:#;text-align:center;padding:4px ;background-color:#fff;z-index:;}
.subtotal{width:150px;color:red;font-weight:bold;}
.operation span:hover,a:hover{cursor:pointer;color:red;text-decoration:underline;} .foot{margin-top:0px;color:#;height:48px;border:1px solid #c8c8c8;border-top:;background-color:#eaeaea;background-image:linear-gradient(RGB(,,),RGB(,,));position:relative;z-index:;}
.foot div, .foot a{line-height:48px;height:48px;}
.foot .select-all{width:80px;height:48px;line-height:48px;color:#;text-align:center;}
.foot .delete{padding-left:10px;}
.foot .closing{border-left:1px solid #c8c8c8;width:103px;text-align:center;color:#;font-weight:bold;cursor:pointer;background-image:linear-gradient(RGB(,,),RGB(,,));}
.foot .closing:hover{background-image:linear-gradient(RGB(,,),RGB(,,));color:#;}
.foot .total{margin: 20px;cursor:pointer;}
.foot #priceTotal, .foot #selectedTotal{color:red;font-family:"Microsoft Yahei";font-weight:bold;}
.foot .selected{cursor:pointer;}
.foot .selected .arrow{position:relative;top:-3px;margin-left:3px;}
.foot .selected .down{position:relative;top:3px;display:none;}
.show .selected .down{display:inline;}
.show .selected .up{display:none;}
.foot .selected:hover .arrow{color:red;}
.foot .selected-view{width:938px;border:1px solid #c8c8c8;position:absolute;height:auto;background:#ffffff;z-index:;bottom:48px;left:-1px;display:none;}
.show .selected-view{display:block;}
.foot .selected-view div{height:auto;}
.foot .selected-view .arrow{font-size:16px;line-height:%;color:#c8c8c8;position:absolute;right:330px;bottom:-9px;}
.foot .selected-view .arrow span{color:#ffffff;position:absolute;left:0px;bottom:1px;} #selectedViewList{padding:10px 20px 10px 20px;}
#selectedViewList div{display:inline-block;position:relative;width:100px;height:80px;border:1px solid #ccc;margin:10px;float:left;}
#selectedViewList div img{width:100px;height:80px;margin-right:10px;float:left;}
#selectedViewList div span{display:none;color:#ffffff;font-size:12px;position:absolute;top:0px;right:0px;width:60px;height:18px;line-height:18px;text-align:center;background:#;cursor:pointer;}
#selectedViewList div:hover span{display:block;}
</style>

js

<script>
/**
* Created by an www.jq22.com
*/
window.onload = function () {
if (!document.getElementsByClassName) {
document.getElementsByClassName = function (cls) {
var ret = [];
var els = document.getElementsByTagName('*');
for (var i = , len = els.length; i < len; i++) { if (els[i].className.indexOf(cls + ' ') >= || els[i].className.indexOf(' ' + cls + ' ') >= || els[i].className.indexOf(' ' + cls) >=) {
ret.push(els[i]);
}
}
return ret;
}
} var table = document.getElementById('cartTable'); // 购物车表格
var selectInputs = document.getElementsByClassName('check'); // 所有勾选框
var checkAllInputs = document.getElementsByClassName('check-all') // 全选框
var tr = table.children[].rows; //行
var selectedTotal = document.getElementById('selectedTotal'); //已选商品数目容器
var priceTotal = document.getElementById('priceTotal'); //总计
var deleteAll = document.getElementById('deleteAll'); // 删除全部按钮
var selectedViewList = document.getElementById('selectedViewList'); //浮层已选商品列表容器
var selected = document.getElementById('selected'); //已选商品
var foot = document.getElementById('foot'); // 更新总数和总价格,已选浮层
function getTotal() {
var seleted = ;
var price = ;
var HTMLstr = '';
for (var i = , len = tr.length; i < len; i++) {
if (tr[i].getElementsByTagName('input')[].checked) {
tr[i].className = 'on';
seleted += parseInt(tr[i].getElementsByTagName('input')[].value);
price += parseFloat(tr[i].cells[].innerHTML);
HTMLstr += '<div><img src="' + tr[i].getElementsByTagName('img')[].src + '"><span class="del" index="' + i + '">取消选择</span></div>'
}
else {
tr[i].className = '';
}
}
selectedTotal.innerHTML = seleted;
priceTotal.innerHTML = price.toFixed();
selectedViewList.innerHTML = HTMLstr; if (seleted == ) {
foot.className = 'foot';
}
}
// 计算单行价格
function getSubtotal(tr) {
var cells = tr.cells;
var price = cells[]; //单价
var subtotal = cells[]; //小计td
var countInput = tr.getElementsByTagName('input')[]; //数目input
var span = tr.getElementsByTagName('span')[]; //-号
//写入HTML
subtotal.innerHTML = (parseInt(countInput.value) * parseFloat(price.innerHTML)).toFixed();
//如果数目只有一个,把-号去掉
if (countInput.value == ) {
span.innerHTML = '';
}else{
span.innerHTML = '-';
}
} // 点击选择框
for(var i = ; i < selectInputs.length; i++ ){
selectInputs[i].onclick = function () {
if (this.className.indexOf('check-all') >= ) { //如果是全选,则吧所有的选择框选中
for (var j = ; j < selectInputs.length; j++) {
selectInputs[j].checked = this.checked;
}
}
if (!this.checked) { //只要有一个未勾选,则取消全选框的选中状态
for (var i = ; i < checkAllInputs.length; i++) {
checkAllInputs[i].checked = false;
}
}
getTotal();//选完更新总计
}
} // 显示已选商品弹层
selected.onclick = function () {
if (selectedTotal.innerHTML != ) {
foot.className = (foot.className == 'foot' ? 'foot show' : 'foot');
}
} //已选商品弹层中的取消选择按钮
selectedViewList.onclick = function (e) {
var e = e || window.event;
var el = e.srcElement;
if (el.className=='del') {
var input = tr[el.getAttribute('index')].getElementsByTagName('input')[]
input.checked = false;
input.onclick();
}
} //为每行元素添加事件
for (var i = ; i < tr.length; i++) {
//将点击事件绑定到tr元素
tr[i].onclick = function (e) {
var e = e || window.event;
var el = e.target || e.srcElement; //通过事件对象的target属性获取触发元素
var cls = el.className; //触发元素的class
var countInout = this.getElementsByTagName('input')[]; // 数目input
var value = parseInt(countInout.value); //数目
//通过判断触发元素的class确定用户点击了哪个元素
switch (cls) {
case 'add': //点击了加号
countInout.value = value + ;
getSubtotal(this);
break;
case 'reduce': //点击了减号
if (value > ) {
countInout.value = value - ;
getSubtotal(this);
}
break;
case 'delete': //点击了删除
var conf = confirm('确定删除此商品吗?');
if (conf) {
this.parentNode.removeChild(this);
}
break;
}
getTotal();
}
// 给数目输入框绑定keyup事件
tr[i].getElementsByTagName('input')[].onkeyup = function () {
var val = parseInt(this.value);
if (isNaN(val) || val <= ) {
val = ;
}
if (this.value != val) {
this.value = val;
}
getSubtotal(this.parentNode.parentNode); //更新小计
getTotal(); //更新总数
}
}
// 点击全部删除
deleteAll.onclick = function () {
if (selectedTotal.innerHTML != ) {
var con = confirm('确定删除所选商品吗?'); //弹出确认框
if (con) {
for (var i = ; i < tr.length; i++) {
// 如果被选中,就删除相应的行
if (tr[i].getElementsByTagName('input')[].checked) {
tr[i].parentNode.removeChild(tr[i]); // 删除相应节点
i--; //回退下标位置
}
}
}
} else {
alert('请选择商品!');
}
getTotal(); //更新总数
}
console.log("\u767e\u5ea6\u641c\u7d22\u3010\u7d20\u6750\u5bb6\u56ed\u3011\u4e0b\u8f7d\u66f4\u591aJS\u7279\u6548\u4ee3\u7801");
// 默认全选
checkAllInputs[].checked = true;
checkAllInputs[].onclick();
}
</script>

原生JS实现购物车功能的更多相关文章

  1. 原生JS实现购物车结算功能代码+zepto版

    html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  2. vue.js实现购物车功能

    购物车是电商必备的功能,可以让用户一次性购买多个商品,常见的购物车实现方式有如下几种: 1. 用户更新购物车里的商品后,页面自动刷新. 2. 使用局部刷新功能,服务器端返回整个购物车的页面html 3 ...

  3. 用vue.js实现购物车功能

    购物车是电商必备的功能,可以让用户一次性购买多个商品,常见的购物车实现方式有如下几种: 1. 用户更新购物车里的商品后,页面自动刷新. 2. 使用局部刷新功能,服务器端返回整个购物车的页面html 3 ...

  4. 原生js实现分页功能

    原生就是实现分页功能 代码如下: var pagination = function(option,fun){ this.parentId = option.id; //容器 this.pageSiz ...

  5. 原生JS实现购物车全选多选按钮功能

    对于JS初学者来说,一个完整的购物车实现还是挺难的,逻辑功能挺多.写出完整功能,能提升不少JS基础,下面实现购物车全选多选按钮功能: 首先HTML及CSS部分: <style> table ...

  6. 使用原生js实现选项卡功能实例教程

    选项卡是前端常见的基本功能,它是用多个标签页来区分不同内容,通过选择标签快速切换内容.学习本教程之前,读者需要具备html和css技能,同时需要有简单的javascript基础. 先来完成html部分 ...

  7. 原生js拖拽功能制作滑动条实例教程

    拖拽属于前端常见的功能,很多效果都会用到js的拖拽功能.滑动条的核心功能也就是使用js拖拽滑块来修改位置.一个完整的滑动条包括 滑动条.滑动痕迹.滑块.文本 等元素,先把html代码写出来,如下所示: ...

  8. 原生js 实现购物车价格和总价 统计

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 原生 js 录屏功能

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

随机推荐

  1. VS2013 添加已有文件夹

    1.将现有项目或文件夹拷贝到指定目录下 2.解决方案右上有个显示所有文件的按钮 然后选中所有要添加的文件,右击

  2. Maximum Product Subarray

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  3. Codeforces Round #342 (Div. 2)-A. Guest From the Past

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. Cocosd-x的坐标系

    OpenGL 坐标系 :   原点在屏幕左下角,x 轴向右,y 轴向上. UI坐标体系       :   原点在屏幕左上角,x 轴向右,y 轴向下. 屏幕坐标系:    UI 世界坐标系:  也叫绝 ...

  5. SuiteScript > RecordType internalID采集步骤与结果

    当你碰到一个有很多sub Fields的id需要map到js文件的时候,是不是想到一个个复制到js文件中?建立成Object,library起来,方便不同的module中共享. 一个复制,很烦,很浪费 ...

  6. 模板——Tarjan

    #include <cstdio> #include <cstring> #include <iostream> #include <vector> u ...

  7. shell技巧

    如何实现Shell脚本以DEAMON的方式运行,即实现Shell版的Fork if [ "$1" != 'background' ] ; then scriptdir=$(cd & ...

  8. ImageLoader图片加载

    http://blog.csdn.net/liu1164316159/article/details/38728259       转载请注明http://write.blog.csdn.net/po ...

  9. 微信小程序-发起请求

    wx.request(object) wx.request发起的是https请求.一个微信小程序,同时只能有5个网络请求连接. object参数说明: 示例代码: wx.request({ url: ...

  10. MySQL基本数据类型

    MySQL数据类型包括:整型.浮点型.日期类型.字符型,这里用表格的方式详细说明每个数据类型,这些只要记住常用的即可,需要再查阅. 整型 数据类型 存储范围 字节 TINYINT 有符号值:-128 ...