基于for循环添加div类

时间:2018-06-28 10:52:12

标签: javascript jquery for-loop

我正在尝试创建一个函数,该函数基于某个变量向多个div添加一些类名。这些类名将用于星级评定系统。

productScore等于3.5时,我正在寻找这样的最终结果:

 <span class="star fa fa-star on"></span>
 <span class="star fa fa-star on"></span>
 <span class="star fa fa-star on"></span>
 <span class="star fa fa-star semi"></span>
 <span class="star fa fa-star off"></span> 

因此,基本上要添加3个类名-> onoffsemi

所以我有这个:

function reviewStars(productScore, container){
  for (i=0; i < productScore; i++) {
    var starClass = productScore - i >= 1 ? 'on' : (productScore - i >= 0.5 ? 'semi' : 'off') 
    $(container).html('<span class="star fa fa-star' + starClass + '</span>')
  }
}

我想在我的整个网站上使用此功能。因此,无论我在哪里都可以重复使用。像这样:

 function initOfferList(){
      // ... code ... 
      $.each(data.products, function(i, product) {
       // ... more code ... 

        var productScore = (product.score * 5) // example 3.5
        var stars = reviewStars(productScore, '.item-rating')
        content += '<div class="item-rating">'+ stars +'</div>';

         // ... more code ....

      }

我的代码不断返回undefined。我不知道为什么它是不确定的。

有人知道吗?

2 个答案:

答案 0 :(得分:2)

如果函数reviewStars返回一个字符串,则您的代码将起作用。

function reviewStars(productScore){
  var container='';
  for (i=0; i < productScore; i++) {
    var starClass = productScore - i >= 1 ? 'on' : (productScore - i >= 0.5 ? 'semi' : 'off') 
    container+='<span class="star fa fa-star' + starClass + '></span>'
  }
  return container;
}

答案 1 :(得分:0)

我在您的代码中看到的内容也许不需要container

function reviewStars(productScore){
  var result = '';
  
  for (i=0; i < productScore; i++) {
    var starClass = productScore - i >= 1 ? 'on' : (productScore - i >= 0.5 ? 'fa-star-half-alt semi' : 'off');
    result += '<span class="star fa fa-star ' + starClass + '"></span>';
  }
  
  return result;
}

// test
var cont = document.querySelector('.results');
var tests = [1,2,3,4,5,1.5,4.5,3.5];

for(var testScore of tests) {
  cont.innerHTML += '<li>'+reviewStars(testScore)+' | ' + testScore + '</li>';
}
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">

<ul class="results">
</ul>