jquery
jQuery对象是一个类数组的对象,含有连续的整形属性以及一系列的jQuery方法。它把所有的操作都包装在一个jQuery()函数中,形成了统一(也是惟一)的操作入口。
其中我们用的非常频繁的一个函数是$()或者说是jQuery(),当我们调用他的时候会根据传入的参数的不同而达到不同的效果。
1.$()或者是jQuery()
1.1
jQuery(selector,context):
接收一个css选择器表达式(selector)和可选的选择器上下文(context),返回一个包含了匹配的DOM元素的jQuery对象。
默认情况下,对匹配元素的查找都是从根元素ducument对象开始,也就是说查找范围是整棵文档树。但是如果给定了上下文context,则在指定上下文中查找.
ps.
<span>body span</span>
<span>body span</span>
<span>body span</span>
<div class="wrap">
<span>wrap span</span>
<span>wrap span</span>
<span>wrap span</span>
</div>
$('span').css('background-color','red');//所有的span都会变红
$('span','.wrap').css('background-color','red');//只有.wrap中的span会变红
1.2
jQuery(html,ownerDocument) 、jQuery(html,props):
用所提供的html创建dom元素。
html参数是要创建的标签,可以是单标签也可以是多标签。
第二个参数用于创建新DOM元素的文档对象,如果不传入则默认为当前的文档对象。
//单标签 两种方式都可以往body中插入div
$('<div>').appendTo('body');
$('<div></div>').appendTo('body');
// 多标签嵌套
$('<div><span>dfsg</span></div>').appendTo('body')
appendTo() 方法在被选元素的结尾(仍然在内部)插入指定内容。
同样也有其他方法在被选元素的头部,以及头部外部,尾部外部添加元素。
1.3
jQuery(element or elementsArray):
如果传入一个DOM元素或者是DOM元素的数组,则把DOM元素封装到jQuery对象中并返回。
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
// 传入DOM元素
$('li').each(function(index,ele){
$(ele).on('click',function(){
$(this).css('background','red');//这里的DOM元素就是this
})
})
//传入DOM数组
var aLi=document.getElementsByTagName('li');
aLi=[].slice.call(aLi);//集合转数组
var $aLi=$(aLi);
$aLi.html('我是jQuery对象');//所有的li的内容都变成'我是jQuery对象'
1.4
jQuery(object):
如果传入的是一个object对象,则把该对象封装到jQuery对象中并返回。
var obj={name:'谦龙'};
var $obj=$(obj);//封装成jQuery对象
//绑定自定义事件
$obj.on('say',function(){
console.log(this.name)//输出谦龙
});
$obj.trigger('say')
1.5
jQuery(callback):
当传进去的参数是函数的时候,则在document对象上绑定一个ready事件监听函数,当DOM结构加载完成的时候执行。
$(function(){
})
//以上代码和下面的效果是一样的
$(document).ready(function(){
...//代码
})
1.6
jQuery(jQuery object):
当传进去的参数是一个jQuery对象的时候,则创建该jQuery对象的一个副本并返回。副本与传入的jQuery对象引用完全相同的元素。
var aLi=$('li');
var copyLi=$(aLi);//创建一个aLi的副本
console.log(aLi);
console.log(copyLi);
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.
$('tr:gt(0)').each(function () {
console.log(this);
这里的this指向的是循环遍历的每一个tr 下的 td;
ps.
输出结果:
<td width="150px">31</td>
<td width="150px">iphhone</td>
<td width="300px">
<button>-</button>
<input type="text" value="0">
<button>+</button>
</td>
<td width="150px">$4000</td>
<td width="150px">0</td>
<td width="150px"><a class="a">移除</a></td>
可以说是指向当前调用者;
})
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重新赋值,
要重新计算商品的总价以及购物车的总金额
jia.click(function () {
var num = $(this).prev().val();
num++;
$(this).prev().val(num);//给input重新赋值
total($(this));//调用购物车总金额函数
allmoney();//调用购买商品总价函数
})
10.2
减号事件
10.2.1
通过$(this).next().val();拿到加号下一个元素,也就是input商品数量的值,进行 加1
然后商品数量加了之后,
要给input重新赋值,
要重新计算商品的总价以及购物车的总金额
jian.click(function () {
var num = $(this).next().val();
num--;
if (num < 0) {
num = 0;
if (confirm("已经是0件了你确定要删除这件商品吗") == true) {
$(this).parent().parent().remove();
}
}
$(this).next().val(num);
total($(this));
allmoney();
})
10.2.2
confirm()
方法用于显示一个带有指定消息和确认及取消按钮的对话框。
如果访问者点击"确定",此方法返回true,否则返回false。
11. parent()
方法返回被选元素的直接父元素。该方法只沿着 DOM 树向上遍历单一层级。
11.1
parents():方法返回被选元素的所有祖先元素。
祖先是父、祖父、曾祖父,依此类推。
该方法从父元素向上遍历 DOM 元素的祖先,直至文档根元素的所有路径(<html>)。
注意:
如果 filter 参数为空,该方法将从直接父元素直至 <body> 和 <html> 的所有路径中选取元素集合中的所有祖先。因此传递一个缩小搜索结果范围的选择器表达式是非常有用的。
11.2
closest(): 方法返回被选元素的第一个祖先元素。
祖先是父、祖父、曾祖父,依此类推。
该方法从当前元素向上遍历,直至文档根元素的所有路径(<html>),来查找 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
单个商品总价
//商品单个总价
function total(o) {
// 参数o 加减调用时所传的当前的元素集合
var n = o.parent().children().first().next().val();
// n 代表的是找到o,也就是说找到加号或者是减号的 parent父级元素 的 children儿子元素 的 first第一个元素的 next下一个元素 的 val值
// 也就是说拿到input框里的商品数量
var money = Number(o.parent().next().text().substr(1));
// money 代表的是 o 父级的下一个元素的text文本 然后通过substr拿到商品单个价格 也就是¥2000
o.parent().next().next().text(n * money);
//最后找到 展示总价的td,计算出总价之后赋值。
}
15.2
计算所有商品的总价
//总购买价
function allmoney() {
var num = 0;
$('tr:not(:first):not(:last)').each(function () {
// tr:not(:first):not(:last) 这里的意思就是除了第一个tr 和 最后一个tr 去循环
//因为这里的第一个tr和最后一个tr是表头和表尾
num += Number($(this).find('td:eq(4)').text());
//最后就是把所有的tr里面第五个td的文本 也就是单个商品的总价 相加计算出 所有总价
})
$('tr:last').children().first().next().text(num);
// 最后找到最后一个tr里的儿子元素的第二个元素 设置文本内容 也就是总价。
}
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.最后总结一下子,基础其实很重要。
附上源码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<style type="text/css">
td {
text-align: center;
height: 50px;
border-bottom: 1px solid gray;
}
a {
padding: 5px 10px;
background: red;
color: #fff;
font-weight: bold;
border-radius: 5px;
text-align: center;
}
tr:last-child td {
border: none;
}
</style>
<body>
<table cellspacing="0" cellpadding="0">
<tr>
<td width="150px">产品编号</td>
<td width="150px">产品名字</td>
<td width="300px">产品数量</td>
<td width="150px">单价</td>
<td width="150px">总价</td>
</tr>
<tr>
<td width="150px">31</td>
<td width="150px">iphhone</td>
<td width="300px">
<button>-</button>
<input type="text" value="0">
<button>+</button>
</td>
<td width="150px">$4000</td>
<td width="150px">0</td>
<td width="150px"><a class="a">移除</a></td>
</tr>
<tr>
<td width="150px">52</td>
<td width="150px">NOKIA</td>
<td width="300px">
<button>-</button>
<input type="text" value="0">
<button>+</button>
</td>
<td width="150px">$2000</td>
<td width="150px">0</td>
<td width="150px"><a class="a">移除</a></td>
</tr>
<tr>
<td width="150px">77</td>
<td width="150px">Samng</td>
<td width="300px">
<button>-</button>
<input type="text" value="0">
<button>+</button>
</td>
<td width="150px">$1000</td>
<td width="150px">0</td>
<td width="150px"><a class="a">移除</a></td>
</tr>
<tr>
<td width="150px">23</td>
<td width="150px">qq</td>
<td width="300px">
<button>-</button>
<input type="text" value="0">
<button>+</button>
</td>
<td width="150px">$3000</td>
<td width="150px">0</td>
<td width="0px"><a class="a">移除</a></td>
</tr>
<tr>
<td width="150px">总购买价</td>
<td width="150px">0</td>
<td width="300px"></td>
<td width="150px"></td>
<td width="0px"><a id="qingchu">清空购物车</a></td>
<td width="150px"></td>
</tr>
</table>
</body>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
$('tr:gt(0)').each(function () {
var jian = $(this).find('td:eq(2)').children().first()
var jia = $(this).find('td:eq(2)').children().last()
// 减点击事件
jian.click(function () {
var num = $(this).next().val();
num--;
if (num < 0) {
num = 0;
if (confirm("已经是0件了你确定要删除这件商品吗") == true) {
$(this).parent().parent().remove();
}
}
$(this).next().val(num);
total($(this));
allmoney();
})
//加点击事件
jia.click(function () {
var num = $(this).prev().val();
num++;
$(this).prev().val(num);
total($(this));
allmoney();
})
})
//商品单个总价
function total(o) {
var n = o.parent().children().first().next().val();
var money = Number(o.parent().next().text().substr(1));
o.parent().next().next().text(n * money);
}
//总购买价
function allmoney() {
var num = 0;
$('tr:not(:first):not(:last)').each(function () {
num += Number($(this).find('td:eq(4)').text());
})
$('tr:last').children().first().next().text(num);
}
//删除
$('.a').click(function () {
let a=$(this).parent().prev().text();//当前商品的总价
let b=$('tr:last').children().first().next().text();//购物车的总价
$('tr:last').children().first().next().text(b-a);
$(this).parent().parent().remove();
})
//清除购物车
$('#qingchu').click(function () {
$('tr:not(:first):not(:last)').remove();
$('tr:last').children().first().next().text('0');
})
</script>
</html>
网友评论