为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ken0510 2017-03-03 09:22:48
<!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>    
查看完整描述

1 回答

已采纳
?
习惯受伤

TA贡献885条经验 获得超1144个赞

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”。

查看完整回答
1 反对 回复 2017-03-05
  • 1 回答
  • 1 关注
  • 1476 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信