猿问

星级评分系统部分加粗代码解释

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">    

<html xmlns="http://www.w3.org/1999/xhtml">    

<head>    

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    

<title>星级评分系统</title>    

<style>    

body,div,ul,li,p{margin:0;padding:0;}    

body{color:#666;font:12px/1.5 Arial;}    

ul{list-style-type:none;}    

#star{position:relative;width:600px;margin:10px auto;}    

#star ul,#star span{float:left;display:inline;height:19px;line-height:19px;}    

#star ul{margin:0 10px;}    

#star li{float:left;width:24px;cursor:pointer;text-indent:-9999px;background:url(img/star.png) no-repeat;}    

#star strong{color:#f60;padding-left:10px;}    

#star li.on{background-position:0 -28px;}    

#star p{position:absolute;top:20px;width:159px;height:60px;display:none;background:url(img/icon.gif) no-repeat;padding:7px 10px 0;}    

#star p em{color:#f60;display:block;font-style:normal;}    

</style>    

<script type="text/javascript">    

window.onload = function ()    

{    

var oStar = document.getElementById("star");    

var aLi = oStar.getElementsByTagName("li");    

var oUl = oStar.getElementsByTagName("ul")[0];    

var oSpan = oStar.getElementsByTagName("span")[1];    

var oP = oStar.getElementsByTagName("p")[0];    

var i = iScore = iStar = 0;    

var aMsg = [    

"很不满意|差得太离谱,与卖家描述的严重不符,非常不满",    

"不满意|部分有破损,与卖家描述的不符,不满意",    

"一般|质量一般,没有卖家描述的那么好",    

"满意|质量不错,与卖家描述的基本一致,还是挺满意的",    

"非常满意|质量非常好,与卖家描述的完全一致,非常满意"    

]    

   

for (i = 1; i <= aLi.length; i++)    

{    

aLi[i - 1].index = i;    

//鼠标移过显示分数    

aLi[i - 1].onmouseover = function ()    

{    

fnPoint(this.index);    

//浮动层显示    

oP.style.display = "block";    

//计算浮动层位置    

oP.style.left = oUl.offsetLeft + this.index * this.offsetWidth - 104 + "px";    

//匹配浮动层文字内容    

oP.innerHTML = "<em><b>" + this.index + "</b> 分 " + aMsg[this.index - 1].match(/(.+)\|/)[1] + "</em>" + aMsg[this.index - 1].match(/\|(.+)/)[1]    

};    

//鼠标离开后恢复上次评分    

aLi[i - 1].onmouseout = function ()    

{    

fnPoint();    

//关闭浮动层    

oP.style.display = "none"    

};    

//点击后进行评分处理    

aLi[i - 1].onclick = function ()    

{    

iStar = this.index;    

oP.style.display = "none";    

oSpan.innerHTML = "<strong>" + (this.index) + " 分</strong> (" + aMsg[this.index - 1].match(/\|(.+)/)[1] + ")"    

}    

}    

//评分处理    

function fnPoint(iArg)    

{    

//分数赋值    

iScore = iArg || iStar;    

for (i = 0; i < aLi.length; i++) aLi[i].className = i < iScore ? "on" : "";    

}    

};    

</script>    

</head>    

<body>    

<div id="star">    

<span>点击星星就能打分</span>    

<ul>    

<li><a href="javascript:;">1</a></li>    

<li><a href="javascript:;">2</a></li>    

<li><a href="javascript:;">3</a></li>    

<li><a href="javascript:;">4</a></li>    

<li><a href="javascript:;">5</a></li>    

</ul>    

<span></span>    

<p></p>    

</div>    

</body>    

</html>    



ken0510
浏览 1482回答 1
1回答

习惯受伤

for (i = 1; i <= aLi.length; i++)     {     aLi[i - 1].index = i;这一段表示:循环给li加了一个index属性,并且赋值。i-1的原因是JS中下标都是从0开始。(" + aMsg[this.index - 1].match(/\|(.+)/)[1] + ")"这一段表示:鼠标点击时拼接分数和选中的星星表示的内容。aMsg是一个数组,下标同样是从0开始的而li.index是从1开始的,所以往前移动一位 aMsg[this.index-1] 就是index对应的评价信息。后边的:.match(/\|(.+)/)[1],表示从消息中用正则匹配"|",然后选择第二个匹配值,也就是把对应索引的消息用“|”号分割,选后边的一个。如:"非常满意|质量非常好,与卖家描述的完全一致,非常满意" ,用“|”分割,可以分割为具有两个字符串的数组:非常满意  ===> 在数组中下标 0质量非常好,与卖家描述的完全一致,非常满意  ===> 在数组中下标 1//评分处理     function fnPoint(iArg)     {     //分数赋值     iScore = iArg || iStar;     for (i = 0; i < aLi.length; i++) aLi[i].className = i < iScore ? "on" : "";     }这一段里,iArg是鼠标划过元素的 index 属性值。iScore = iArg || iStar;  表示,如果iArg没有传入正确的值,iScore将等于iStar。后边那个循环,表示给鼠标滑过元素和它前边的元素加CSS类“on”。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答