最終的なイメージ
たとえばこんな感じで表を作りたいとします。
<table>
<tr>
<th>星1つ</th>
<td>2</td>
</tr>
<tr>
<th>星2つ</th>
<td>4</td>
</tr>
<tr>
<th>星3つ</th>
<td>5</td>
</tr>
</table>
html & js
名前と値が対になるような表なので次のようにdata属性を設定します。
html
<div class="star" data-star='{"星1つ":2,"星2つ":4,"星3つ":5}'></div>
jQueryのコードはdata属性を読み込んだら、数だけappendさせれば完成です。
javascript
(function($) {
$(function() {
$('.star').each(function(){
var that = $(this);
var starData = that.data('star');
if (starData) {
that.append('<table></table>');
$.map(starData, function(value, key) {
that.find('table').append('<tr><th>'+key+'</th><td>'+value+'</td></tr>');
});
}
});
});
})(jQuery);
値の数だけ画像を生成する
これだけだとわざわざjs使うまでもないですが、例えば次のように「難易度:~」みたいに星画像を並べたいときは、そのままimgを配置してマークアップするとわかり難いですね。
<table> <tr> <th>難易度</th> <td> <img src="img/star.png"> <img src="img/star.png"> </td> </tr> <tr> <th>ほげ度</th> <td> <img src="img/star.png"> <img src="img/star.png"> <img src="img/star.png"> <img src="img/star.png"> </td> </tr> ... </table>
そんなときは次のようにdata属性を設定して、
html
<div class="star" data-star='{"難易度":2,"ほげ度":4,"ふが度":5}'></div>
data属性で設定した値は数値で扱えますので、そのままループで回せば数の分だけ画像を追加できます。
javascript
$('.star').each(function(){
var that = $(this);
var starData = that.data('star');
if (starData) {
that.append('<table></table>');
$.map(starData, function(value, key) {
var out = '<tr><th>'+key+'</th><td>';
for (var i=0; i < value; i++) {
out += '<img src="img/star.png">';
}
out += '</td></tr>';
that.find('table').append(out);
});
}
});
かなり局地的にしか使えない小回り系コードでしたが以上です。
data属性はその場でjsのオプション的に設定できたりするので、他にもいろいろとできそうですね。

