I have a situation where i'm getting data
from database
like this
var data = [ {name:'Alpha Hotel',price:400,star:3},
{name:'Beta Hotel',price:600,star:4},
{name:'Gamma Hotel',price:450,star:5},
];
i want to display as much rating
as my star
for example for this data
{name:'Alpha Hotel',price:400,star:3}
my rating
should be 3
not 1
here is what i have tried: https://jsfiddle.net/ewL4wLvh/2/
While constructing the HTML, you need to repeat the spans
as many times as of stars.
You can use this neat trick to achieve this without using loops:
htmlConstructed += '<p>Name : '+val.name+'</p>'+
'<p>Price : '+val.price+'</p>'+
'Rating :'+new Array(val.star + 1).join('<span><i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i></span>')+
'<hr/>';
Check out the updated FIDDLE
Use loop
for form star
markup to be appended-
Array#fill
- The fill()
method fills all the elements of an array from a start index to an end index with a static value.
Array#reduce
- The reduce()
method applies a function against an accumulator and each element in the array (from left to right) to reduce it to a single value.
var data = [{ name: 'Alpha Hotel', price: 400, star: 3 }, { name: 'Beta Hotel', price: 600, star: 4 }, { name: 'Gamma Hotel', price: 450, star: 5 }, ]; var htmlConstructed = ''; $.each(data, function(i, val) { var starStr = Array(val.star).fill(null).reduce((a) => a + '<i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i>', ''); htmlConstructed += '<p>Name : ' + val.name + '</p>' + '<p>Price : ' + val.price + '</p>' + 'Rating :<span>' + starStr + '</span><hr/>'; }); $('#content-area').append(htmlConstructed);
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet" /> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <div id="content-area"></div>
您可以使用条件(如果是,如果是其他,则为elf),并检查它有多少颗恒星,然后显示它有多少颗恒星。
use Array.join
for times that you want repeat some element.
var data = [ {name:'Alpha Hotel',price:400,star:3},
{name:'Beta Hotel',price:600,star:4},
{name:'Gamma Hotel',price:450,star:5},
];
var htmlConstructed = '';
$.each(data,function(i,val){
htmlConstructed += '<p>Name : '+val.name+'</p>'+'<p>Price : '+val.price+'</p>'+'Rating :<span>'+
Array(val.star).join('<i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i>')
+'</span><hr/>';
});
$('#content-area').append(htmlConstructed);
you can use this simple solution.
var data = [ {name:'Alpha Hotel',price:400,star:3},
{name:'Beta Hotel',price:600,star:4},
{name:'Gamma Hotel',price:450,star:5},
];
var htmlConstructed = '';
$.each(data,function(i,val){
// console.log(val.name);
var rating='';
for(var i=0;i<val.star;i++){
rating = rating +'<span><i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i></span>';
}
htmlConstructed += '<p>Name : '+val.name+'</p>'+'<p>Price : '+val.price+'</p>'+'Rating :'+rating+'<hr/>';
});
$('#content-area').append(htmlConstructed);
Use this Code,
var data = [ {name:'Alpha Hotel',price:400,star:3},
{name:'Beta Hotel',price:600,star:4},
{name:'Gamma Hotel',price:450,star:5},
];
var htmlConstructed = '';
$.each(data,function(i,val){
// console.log(val.name);
htmlConstructed += '<p>Name : '+val.name+'</p>'+'<p>Price : '+val.price+'</p>'+'Rating :'+ addStar(val.star) +'<hr/>';
});
function addStar(rating){
var returnString = '';
for(var i=0;i< rating;i++ )
returnString = returnString + '<span><i class="fa fa-star" aria-hidden="true" style="color:#D91E18;"></i></span>';
return returnString;
}
$('#content-area').append(htmlConstructed);
Fiddle: https://jsfiddle.net/r83wnpqr/
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.