【发布时间】:2016-11-29 03:18:15
【问题描述】:
最近我想把一个数字变成星级,我在这里偶然发现了这篇文章:https://stackoverflow.com/a/1987545/1871869 这正是我想做的。我遵循了这个解释,但我似乎无法让它在我的本地环境中工作,我想知道是否有人可以帮助我。这是我的尝试:
$.fn.stars = function() {
return $(this).each(function() {
// Get the value
var val = parseFloat($(this).html());
// Make sure that the value is in 0 - 5 range, multiply to get width
var size = Math.max(0, (Math.min(5, val))) * 16;
// Create stars holder
var $span = $('<span />').width(size);
// Replace the numerical value with stars
$(this).html($span);
});
}
$(function() {
console.log("Calling stars()");
$('.results-contents span.stars').stars();
});
.results {
font-size: 0;
padding-bottom: 16px;
}
.results-content {
font-size: 13px;
display: inline-block;
margin-left: 20px;
vertical-align: top;
}
.results .results-content span.stars span.stars span {
background: url('/resources/graphics/stars-icons.png') 0 -36px repeat-x;
width: 175px;
height: 80px;
}
.results .results-content span.stars {
max-width: 80px;
background-position: 0 0;
}
<script type="text/template" id="results-template">
<div class="results">
<div class="results-content">
<span class="stars">4.0</span>
</div>
</div>
</script>
星星图片:
我想做的是简单地显示空星,然后根据评级,在空星之上显示橙色星,这样我就可以显示全星和半星评级。但是,我得到的只是一个要显示的数字。我上面的console.log 似乎被调用了,但似乎图像的实际渲染和星级的计算不起作用。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
好吧,span 没有宽度,因为它是一个内联元素。
-
@epascarello 但我没有在这个 CSS 类中声明一个:
.results .results-content span.stars span.stars span? -
跨度必须是内联块才能有宽度
-
结果内容 !== 结果内容
标签: javascript jquery html css