JQuery/Font Awesome - 星级默认值

标签 jquery html css font-awesome

场景:

基本上,我有一个系统,可以让用户对不同的产品进行评分(使用 Laravel),然后我会得到一个数字,即平均值,然后填充星星。评级显示在“产品列表”页面上,因此该页面上将有多个产品。

我想做的事:

我希望能够通过 div 传递一个变量,该变量在页面加载时填充星星。我尝试过以下方法:

<span class="rating" rating="3">
  <span class="star "></span>
  <span class="star "></span>
  <span class="star"></span>
  <span class="star"></span>
  <span class="star"></span>
</span>

jQuery:

$('.rating').each(function (event) {

  var rating = $(this).attr('rating');

  for(var i = 0; (i < rating); i++)
  {
        $('.rating span.star').eq(i).addClass('filled');
  }

});

但问题是恒星分布在错误的区域。而且,当有另一种产品时,它只采用最后一个产品及其星级,而忽略其余产品。

一个实例:

http://jsfiddle.net/qes0tgrt/

最佳答案

为了使星星朝正确的方向移动,您需要将 . rating 类更改为:

.rating {
       unicode-bidi:bidi-override;
       direction:ltr;
       font-size:30px;
}

添加这些类以获得半星:

span.star.half-filled:before{
    content: "\f089";
    color:#e3cf7a;
}
span.star.half-filled:after{
    content: "\f006";
    color:#e3cf7a;
    margin-left:-20px;
}

脚本看起来像这样:

$('.rating').each(function (event) {
   var rating = $(this).attr('rating');
   for(var i = 0; (i < rating); i++)
   {
      $(this).find('span.star').eq(i).addClass('filled');
   }
   //if rating has decimal places means its a half star
   if(rating % 1 > 0)
      $(this).find('span.star').eq(i - 1).addClass('half-filled');
});

最后对于半星使用评级属性,如下所示:

<span class="rating" rating="2.5">

更新了工作示例:fiddle

关于JQuery/Font Awesome - 星级默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37562892/

相关文章:

iphone - 如何在 iPhone 上执行 HTML 文件( objective-c )?

html - 使用渐变时,如何使页脚扩展页面的其余部分?

javascript - CSS伪选择器选择querySelector中的当前元素?

html - 如何在不拉伸(stretch)的情况下调整图像大小?

css - 如何缩小增加屏幕宽度?

javascript - 如何将滚动条添加到 Jquery 对话框

javascript - 如何在 ngModel 中转换为毫秒?

jquery - Bootstrap-轮播延迟加载程序

javascript - 如何用jquery改变背景图片

javascript - 范围问题,从一个 for 循环到另一个 for 循环引用迭代器 "i"