jQuery五角星评分(end方法)

205 阅读1分钟

当鼠标移入空心五角星时,该五角星和其前面的五角星变成实心。鼠标离开时,所有五角星为空心。
当鼠标点击某一空心五角星时,该五角星和其前面的五角星变为实心的。鼠标离开,保持不变。

练习之前,学习一个概念:链式编程

什么是链式编程?

和果给元素调用一个方法,这个方法有返回值,并且返回的是一个jQuery对象,那就可以继续再点出jQuery方法
注意:必须是jQuery对象才能点出jQuery方法

有些时候我们一个方法返回的确实是一个jQuery对象,
但是这个对象又不是我们想要的对象,可以使用end()方法返回上一状态
end()方法也是jQuery方法,也需要一个jQuery对象才能点出

代码:

<!DOCTYPE html>

<html lang="en">

	<head>
		<meta charset="UTF-8">
		<title>五角星评分案例</title>
		<style>
			* {
				padding: 0;
				margin: 0;
			}
			
			.comment {
				font-size: 40px;
				color: red;
			}
			
			.comment li {
				float: left;
			}
			
			ul {
				list-style: none;
			}
		</style>

	</head>

	<body>
		<ul class="comment">
			<li></li>
			<li></li>
			<li></li>
			<li></li>
			<li></li>
		</ul>
	</body>

</html>
<script src="js/jquery.js"></script>
<script>
	$(function() {

		//1. 给li注册鼠标经过事件,让自己和前面所有的兄弟都变成实心,后面的li为空心
		var wjx_k = "☆";
		var wjx_s = "★";
		$(".comment>li").on("mouseenter", function() {
//			//让自己和前面所有的兄弟都变成实心
//			$(this).text(wjx_s).prevAll().text(wjx_s);
//			//后面的li为空心
//			$(this).nextAll().text(wjx_k);

				//与上面代码等价
				$(this).text(wjx_s).prevAll().text(wjx_s).end().nextAll().text(wjx_k);
		});

		//2. 给ul注册鼠标离开事件,让所有的li都变成空心
		$(".comment>li").on("mouseleave", function() {
			$(".comment>li").text(wjx_k);

			//点击事件又离开的事件,找到current,让current和current前面的变成实心就行。
			$("li.current").text(wjx_s).prevAll().text(wjx_s);
		});

		//3. 给li注册点击事件
		$(".comment>li").on("click", function() {
			$(this).addClass("current").siblings().removeClass("current");
		});

	});
</script>