var aggregates = document.querySelectorAll("[itemprop='aggregateRating'"); var scores = 0; var n = 0; for (var i = 0; i < aggregates.length; i++) { scoreCurr = parseFloat(aggregates[i].querySelector("[itemprop='ratingValue']").getAttribute("content")); nCurr = parseFloat(aggregates[i].querySelector("[itemprop='reviewCount']").getAttribute("content")); scores += scoreCurr; n += nCurr; } alert(scores/n);
<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"> <meta itemprop="ratingValue" content="35" /> <meta itemprop="reviewCount" content="7" /> </div> <div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"> <meta itemprop="ratingValue" content="42" /> <meta itemprop="reviewCount" content="10" /> </div>
是的,使用jQuery并不太难。此代码将获取所有元内容,将它们转换为整数,找到平均评级,然后附加一些 HTML 在你的底部 head 元件。
HTML
head
// first gather all the meta elements with an itemprop value of "ratingValue" var metas = $('meta[itemprop="ratingValue"]').get(); // convert the content values of these elements to integers and put them in an array var ratings = metas.map((m) => ~~m.content); // calculate and round the average rating value var average = ~~(ratings.reduce((a,b) => a + b) / ratings.length + 0.5); // create the HTML for the aggregateRating parent div var aggregateRating = '<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">'; // create ratingValue meta HTML using the average rating var ratingValue = '<meta itemprop="ratingValue" content="average ' + average + '" />'; // create aggregateRating meta HTML using the rating count var reviewCount = '<meta itemprop="reviewCount" content="' + ratings.length + ' reviews" />'; // combine these strings and a closing tag, then append the HTML to the end of head $('head').append(aggregateRating + ratingValue + reviewCount + '</div>');
或者你甚至可以使用伯纳德方法
$('head').append(['<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">', '</div>'].join([ ['ratingValue', 'average ' + ~~((r = $('meta[itemprop="ratingValue"]').get().map((m) => ~~m.content)).reduce((a, b) => a + b) / r.length + .5)], ['reviewCount', r.length + ' reviews'] ].map((a, b) => ['<meta itemprop="', '" content="', '">'].map((c, d) => [c, a[d]]))).replace(/,/g, ''));