jQuery 第二弹

jQuery的属性操作

设置和获取元素固有的属性值 prop()

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/jquery-3.5.1.js"></script>
	</head>
	<body>
		<a href="#" title="你妹妹的">你妹妹的</a>
		<input type="checkbox" checked/>
		<script>
			$(function(){
				
				console.log($("a").prop("title"))
				$("a").prop("title","你妈妈");
				console.log($("a").prop("title"))
				$("input").change(function(){
					console.log($(this).prop("checked"));
				})
			})
		</script>
	</body>
</html>

设置和获取元素自定义属性值attr()

<a href="#" title="你妹妹的" index="1">你妹妹的</a>
console.log($("a").attr("index"))
$("a").attr("index","100")
console.log($("a").attr("index"))

数据缓存data()

data() 方法可以在指定的元素上存取数据,并不会修改DOM元素结构,一旦页面刷新,之前存放的数据都将被移除。

①附加数据语法
语法:data(“name”,“value”) 向被选元素附加数据
②获取数据语法
date(“name”) 向被选元素获取数据

<body>
    <span>123</span>
    <script>
        $(function() {
			// 3. 数据缓存 data() 这个里面的数据是存放在元素的内存里面
            $("span").data("uname", "andy");
            console.log($("span").data("uname"));
            // 这个方法获取data-index h5自定义属性 第一个 不用写data-  而且返回的是数字型
            console.log($("div").data("index"));
        })
    </script>
</body>

购物车模块–全选

用.length获取元素个数

两个全选按钮的类是 checkall
购物车元素按钮是j-checkbox

      <input type="checkbox" name="" id="" class="checkall"> 全选
            <input type="checkbox" name="" id="" class="checkall"> 全选
 <input type="checkbox" name="" id="" checked class="j-checkbox">
  <input type="checkbox" name="" id="" checked class="j-checkbox">
   <input type="checkbox" name="" id="" checked class="j-checkbox">
$(function(){
	// $(".checkall").click(function(){
	// 	$(".j-checkbox").prop("checked",$(this).prop("checked"));
	// })
	把状态值赋给他们即可 不用想赋true or false 简单点即可 同时 另一个全选按钮也要赋值
	$(".checkall").change(function(){
		$(".j-checkbox,.checkall").prop("checked",$(this).prop("checked"));
	})
	如果商品都被选择了,那么两个全选按钮也要被选择
	$(".j-checkbox").change(function(){
		// console.log($(".j-checkbox"))
		// console.log($(".j-checkbox:checked"))
		if($(".j-checkbox").length==$(".j-checkbox:checked").length)
			{
				$(".checkall").prop("checked",true);
			}else{
				$(".checkall").prop("checked",false);
			}
	})
})

jQuery内容文本值

获取设置元素内容

$("div").html();
$("div").html("123");
结果: <span>123</span>

普通元素文本内容text()

$("div").text();

$("div").text("123");
// 123  
// 获取过来的不带标签 123

获取设置表单值 val()

获取表单的的值:val()
设置表单的值:val(“内容”)

<body>
    <div>
        <span>我是内容</span>
    </div>
    <input type="text" value="请输入内容">
    <script>
        // 1. 获取设置元素内容 html()
        console.log($("div").html());
        // $("div").html("123");
        // 2. 获取设置元素文本内容 text()
        console.log($("div").text());
        $("div").text("123");

        // 3. 获取设置表单值 val()
        console.log($("input").val());
        $("input").val("123");
    </script>
</body>

购物车模块(实战)

增减商品数量

通过获取当前加减号的 兄弟 (input) 修改它的值

		//加号
	$(".increment").click(function(){
		var num=$(this).siblings(".itxt").val();
		num++;
		$(this).siblings(".itxt").val(num);
	})
		//减号
	$(".decrement").click(function(){
		var num=$(this).siblings(".itxt").val();
		if(num>1){
			num--;
			$(this).siblings(".itxt").val(num);
		}
	})

商品价格小计

substr(num) 表示将字符串的前num位 全部删除 num从1开始

	//加号
	$(".increment").click(function(){
		var num=$(this).siblings(".itxt").val();
		num++;
		$(this).siblings(".itxt").val(num);
		//获取指定单价  p-price是 加减号的爸爸的爸爸的兄弟
			//获取那个字符串
		var price=$(this).parent().parent().siblings(".p-price").text();
			//剔除 ¥ 通过sbustr(1) 代表 剔除第几个元素之前的所有内容
		price=price.substr(1);
		
			//改变小计
		var sum=price*num;
		$(this).parent().parent().siblings(".p-sum").text('¥'+sum);
		
	})
		//减号
	$(".decrement").click(function(){
		var num=$(this).siblings(".itxt").val();
		if(num>1){
			num--;
			$(this).siblings(".itxt").val(num);
		}
		var price=$(this).parent().parent().siblings(".p-price").text();
			//剔除 ¥ 通过sbustr(1) 代表 剔除第几个元素之前的所有内容
		price=price.substr(1);
		
			//改变小计
		var sum=price*num;
		$(this).parent().parent().siblings(".p-sum").text('¥'+sum);
		
	})
	

parents() 获取他所有父级元素 不用在一层一层的取值

上一个代码的 .parent().parent() 可以直接写成

$(this).parents(".p-num").siblings(".p-price").text();

商品价格小计(根据输入值的变化)

//----------------------下面是用户主动输入数量----------------------------
	$(".itxt").change(function(){
		var num=$(this).val();
		var price=$(this).parents(".p-num").siblings(".p-price").html().substr(1);
		
		$(this).parents(".p-num").siblings(".p-sum").html("¥"+num*price);
		
	})

jQuery元素操作

主要是遍历,创建,添加,删除元素操作

遍历 each方法

语法一:
$("div").each(function(index,domEle){xxx;})
each()方法遍历匹配的每一个元素。主要用DOM处理。
each每一个里面的回调函数有2个参数: index是每个元素的索引号,demEle是每个DOM元素,不是jQuery对象

所以想要使用jQuery方法,需要给这个dom元素转换为jquery对象 $(domEle)
// 语法二
$.each(Object,function(index,element){xxx;})
$.each() 方法可用于遍历任何对象,主要用于数据处理,比如数组,对象
里面的函数有2个参数: index 是每个元素的索引号,element遍历内容

操作里面的元素记得要转化成jq对象

	<ul>
			<li>1</li>
			<li>1</li>
			<li>1</li>
			<li>1</li>
			<li>1</li>
		</ul>
		<script>
			$(function(){
				var color=["red","white","blue","purple","yellow"];
				$("li").each(function(i,domEle){
					$(domEle).css("color",color[i]);
				})
						
			})
		</script>
		第二种
			<script>
			$(function(){
				var color=["red","white","blue","purple","yellow"];
				$.each($("li"),function(i,domEle){
					$(domEle).css("color",color[i]);
					console.log(color[i]);
				})
						
			})
		</script>

创建 添加 删除元素操作

创建元素


$("<li></li>");
 动态创建一个li标签
var li = $("<li>我是后来创建的li</li>");
var div =$("<div>我是后来的div</div>")

添加元素
1.内部添加

把内容放入匹配元素内部最后面:element.append("内容")
把内容放入匹配元素内部最前面:element.prepend("内容")


// 1.内部添加
element.append("内容")
$("ul").append(li);
// 把内容放入匹配元素内部最后面,类似原生appendChild

element.prepend("内容")
$("ul").prepend(li);
// 把内容放入匹配元素内部最前面

2.外部添加

外部添加把内容放到目标元素后面:element.after("内容")
外部添加把内容放到目标元素前面:element.before("内容")
// 2.外部添加
element.after("内容");
$(".test").after(div);
// 把内容放入目标元素后面

element.before("内容");
// 把内容放入目标元素前面
内部添加元素,生成之后,它们是父子关系
外部添加元素,生成之后,它们是兄弟关系

删除元素

删除匹配的元素(本身):element.remove()
删除匹配的元素集合中所有的子节点:element.empty()
清空匹配的元素内容:element.html("")
1.element.remove()      //删除匹配的元素(本身)
$("ul").remove();

2.element.empty()       //删除匹配元素里面的子结点(孩子)
$("ul").empty();

3.element.html("")      //删除匹配元素里面的子结点(孩子)

购物车模块(实战之商品数量价格总计)

计算被选的购物品的 价格数量

$(function(){
	// $(".checkall").click(function(){
	// 	$(".j-checkbox").prop("checked",$(this).prop("checked"));
	// })
	//把状态值赋给他们即可 不用想赋true or false 简单点即可 同时 另一个全选按钮也要赋值
	$(".checkall").change(function(){
		$(".j-checkbox,.checkall").prop("checked",$(this).prop("checked"));
	})
	//如果商品都被选择了,那么两个全选按钮也要被选择
	$(".j-checkbox").change(function(){
				
		// console.log($(".j-checkbox"))
		// console.log($(".j-checkbox:checked"))
		if($(".j-checkbox").length==$(".j-checkbox:checked").length)
			{
				$(".checkall").prop("checked",true);
			}else{
				$(".checkall").prop("checked",false);
			}

	})
	//----------------------下面是数量加减号----------------------------
		//加号
	$(".increment").click(function(){
		
		var num=$(this).siblings(".itxt").val();
		num++;
		$(this).siblings(".itxt").val(num);
		//获取指定单价  p-price是 加减号的爸爸的爸爸的兄弟
			//获取那个字符串
		var price=$(this).parents(".p-num").siblings(".p-price").text();
			//剔除  通过sbustr(1) 代表 剔除第几个元素之前的所有内容
		price=price.substr(1);
			//改变小计
		var sum=price*num;
		$(this).parents(".p-num").siblings(".p-sum").text('¥'+sum);
		// if($(this).parents(".p-num").siblings(".p-checkbox").val()
	})
		//减号
	$(".decrement").click(function(){
		var num=$(this).siblings(".itxt").val();
		if(num>1){
			num--;
			$(this).siblings(".itxt").val(num);
		}
		var price=$(this).parents(".p-num").siblings(".p-price").text();
			//剔除  通过sbustr(1) 代表 剔除第几个元素之前的所有内容
		price=price.substr(1);
		
			//改变小计
		var sum=price*num;
		$(this).parents(".p-num").siblings(".p-sum").text('¥'+sum);
		
	})
	
	//----------------------用户主动输入数量----------------------------
	$(".itxt").change(function(){
		var num=$(this).val();
		var price=$(this).parents(".p-num").siblings(".p-price").html().substr(1);
		
		$(this).parents(".p-num").siblings(".p-sum").html("¥"+num*price);
		
	})
	
	$(".j-checkbox,.itxt,.checkall,.decrement,.increment").on({
		change:function(){getSumNumAndPrice()},
		click:function(){getSumNumAndPrice()}
	})
	
	

	
	//计算所有的数量 和价格
	function getSumNumAndPrice(){
		
		var sumNum=0;
		$.each($(".itxt"),function(i,domEle)
		{
			
			if($(domEle).parents(".p-num").siblings(".p-checkbox").find(".j-checkbox").prop("checked")==true)
				sumNum+=parseInt($(domEle).val());
		})
		$(".amount-sum em").html(sumNum);
		
		var sumPrice=0;
		$.each($(".p-sum"),function(i,domEle){
	
			if($(domEle).siblings(".p-checkbox").find(".j-checkbox").prop("checked")==true)
			{
				
				var p=parseFloat($(domEle).text().substr(1));
				sumPrice+=p;
			}
		})
		$(".price-sum em").html("¥"+sumPrice);
	}
	
})

我写了一个on 绑定事件,每次改变checked的时候 或者数量改变的时候 就触发,其次每次只算被checked的元素

删除商品

//删除商品部分
		//单个删除
		$(".p-action>a").click(function(){
			$(this).parents(".cart-item").remove();
			getSumNumAndPrice()
		})
		//批量删除
		$(".remove-batch").click(function(){
			$(".j-checkbox:checked").parents(".cart-item").remove();getSumNumAndPrice()
		})
		//清理购物车
		$(".clear-all").click(function(){
			$(".cart-item").remove();getSumNumAndPrice();
			
		})

$(".j-checkbox:checked") 代表被选中的 .j–checkbox

给选中的商品添加背景色

//判断是否被选中 然后改变背景颜色
		if($(this).prop("checked")==true)
		{
			$(this).parents(".cart-item").addClass("check-cart-item");
			
		}else{
			$(this).parents(".cart-item").removeClass("check-cart-item");
			
		}

小技巧:把两种状态封装到类中 需要时直接添加或者移除class即可

jQuery尺寸

<body>
    <div></div>
    <script>
        $(function() {
            // 1. width() / height() 获取设置元素 width和height大小 
            console.log($("div").width());
            // $("div").width(300);

            // 2. innerWidth() / innerHeight()  获取设置元素 width和height + padding 大小 
            console.log($("div").innerWidth());

            // 3. outerWidth()  / outerHeight()  获取设置元素 width和height + padding + border 大小 
            console.log($("div").outerWidth());

            // 4. outerWidth(true) / outerHeight(true) 获取设置 width和height + padding + border + margin
            console.log($("div").outerWidth(true));


        })
    </script>
</body>

jQuery位置

offset() 设置或获取元素偏移

offset() 方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系
$(".son").offset();
$(".son").offset().top;
$(".son").offset({
    top: 200,
    left: 200
});
offset().top用于获取距离文档顶部的距离,
offset().left 用于获取距离文档左侧的距离

position()获取元素偏移

position() 方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为准
该方法有2个属性 left、top。
position().top 用于获取距离定位父级顶部的距离,
position().left 用于获取距离定位父级左侧的距离。
$(".son").position();
// 这个方法只能获取偏移,不能设置偏移
<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <script>
        $(function() {
            // 1. 获取设置距离文档的位置(偏移) offset
            console.log($(".son").offset());
            console.log($(".son").offset().top);
            // $(".son").offset({
            //     top: 200,
            //     left: 200
            // });
            // 2. 获取距离带有定位父级位置(偏移) position   如果没有带有定位的父级,则以文档为准
            // 这个方法只能获取不能设置偏移
            console.log($(".son").position());
            // $(".son").position({
            //     top: 200,
            //     left: 200
            // });
        })
    </script>
</body>

scrollTop() / scrollLeft() 设置或获取元素被卷去的头部和左侧

scrollTop()方法设置或返回被选元素被卷去的头部。
不跟参数是获取,参数为不带单位的数字则是设置被卷去的头部。

// 页面滚动事件
$(window).scroll(function(){
    $(document).scrollTop();
})
 // 页面滚动事件
            var boxTop = $(".container").offset().top;
            $(window).scroll(function() {
                // console.log(11);
                console.log($(document).scrollTop());
                if ($(document).scrollTop() >= boxTop) {
                    $(".back").fadeIn();
                } else {
                    $(".back").fadeOut();
                }
            });
            // 返回顶部
            $(".back").click(function() {
                // $(document).scrollTop(0);
                $("body, html").stop().animate({
                    scrollTop: 0
                });
                // $(document).stop().animate({
                //     scrollTop: 0
                // }); 不能是文档而是 html和body元素做动画
            })

电梯导航栏案例(实战)

在这里插入图片描述
当页面到特定位置后 显示左侧的小工具 当用户点击后 页面到达指定的位置
同时颜色改变

$(function(){
	//左侧的菜单栏
	var top=$(".recommend").offset().top;
	tool();
	function tool(){
		if($(document).scrollTop()>=top)
		{
			$(".fixedtool").fadeIn();
		}else{
			$(".fixedtool").fadeOut();
		}
	}
	$(window).scroll(function(){
		tool()
	})
	//点击菜单栏的指定模块 跳到指定模块
	$(".fixedtool li").click(function(){
		//获取集合元素 index
		var current=$(".floor .w").eq($(this).index()).offset().top;
		$("body,html").stop().animate({
			scrollTop:current
		});
		//写法麻烦
		// $(".fixedtool li").removeClass("current");
		// $(this).addClass("current");
		//简单写法
		$(this).addClass("current").siblings().removeClass("current");
	})
})

tool()方法必须要封装起来 执行两次 因为当你页面 位置到达后 你刷新页面重新加载 会不显示出来 因为没法触发那个事件
同时那个current类的 添加和删除

$(this).addClass(“current”).siblings().removeClass(“current”); 一举双的

这个一句解决!!!!

滑动页面导航自动添加current

一次判断 如果距离大于 就执行。

	//判断 页面距离 从而 让菜单栏的指定模块颜色变化
	function toolCurrent(){
		$.each($(".floor .w"),function(i,ele){
			if($(ele).offset().top<$(document).scrollTop())
			{
				$(".fixedtool li").eq(i).addClass("current").siblings().removeClass("current");
			}
		})
	}
	

完整代码

// $(function() {
//     // 当我们点击了小li 此时不需要执行 页面滚动事件里面的 li 的背景选择 添加 current
//     // 节流阀  互斥锁 
//     var flag = true;
//     // 1.显示隐藏电梯导航
//     var toolTop = $(".recommend").offset().top;
//     toggleTool();

//     function toggleTool() {
//         if ($(document).scrollTop() >= toolTop) {
//             $(".fixedtool").fadeIn();
//         } else {
//             $(".fixedtool").fadeOut();
//         };
//     }

//     $(window).scroll(function() {
//         toggleTool();
//         // 3. 页面滚动到某个内容区域,左侧电梯导航小li相应添加和删除current类名


//         if (flag) {
//             $(".floor .w").each(function(i, ele) {
//                 if ($(document).scrollTop() >= $(ele).offset().top) {
//                     console.log(i);
//                     $(".fixedtool li").eq(i).addClass("current").siblings().removeClass();

//                 }
//             })
//         }



//     });
//     // 2. 点击电梯导航页面可以滚动到相应内容区域
//     $(".fixedtool li").click(function() {
//         flag = false;
//         console.log($(this).index());
//         // 当我们每次点击小li 就需要计算出页面要去往的位置 
//         // 选出对应索引号的内容区的盒子 计算它的.offset().top
//         var current = $(".floor .w").eq($(this).index()).offset().top;
//         // 页面动画滚动效果
//         $("body, html").stop().animate({
//             scrollTop: current
//         }, function() {
//             flag = true;
//         });
//         // 点击之后,让当前的小li 添加current 类名 ,姐妹移除current类名
//         $(this).addClass("current").siblings().removeClass();
//     })
// })
$(function(){
	//判断 页面距离从何决定是否让 菜单出来
	function tool(){
		if($(document).scrollTop()>=top)
		{
			$(".fixedtool").fadeIn();
		}else{
			$(".fixedtool").fadeOut();
		}
	}
	//判断 页面距离 从而 让菜单栏的指定模块颜色变化
	function toolCurrent(){
		$.each($(".floor .w"),function(i,ele){
			if($(ele).offset().top<$(document).scrollTop())
			{
				$(".fixedtool li").eq(i).addClass("current").siblings().removeClass("current");
			}
		})
	}
	
	//左侧的菜单栏
	var top=$(".recommend").offset().top;
	tool();
	toolCurrent();
	$(window).scroll(function(){
		tool();
		toolCurrent()
	})
	//点击菜单栏的指定模块 跳到指定模块
	$(".fixedtool li").click(function(){
		//获取集合元素 index
		var current=$(".floor .w").eq($(this).index()).offset().top;
		$("body,html").stop().animate({
			scrollTop:current
		});
		//写法麻烦
		// $(".fixedtool li").removeClass("current");
		// $(this).addClass("current");
		//简单写法
		$(this).addClass("current").siblings().removeClass("current");
	})
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值