せいくらべ──原作 vs 実写という記事で使っているスクリプトです。
そもそも身長データが存在するキャラしかいないので問題ないんですが、ちょっともやもやするわね…
キャストの身長が高い時は
ちなみに
なお、変数が数値かどうかを判定する
(function () {
'use strict';
var $t = document.getElementsByTagName('table');
if($t == null)
return;
function isNumber(x){
if( typeof(x) != 'number' && typeof(x) != 'string' )
return false;
else
return (x == parseFloat(x) && isFinite(x));
}
var tlen = $t.length;
for(var i=0; i<tlen; i++){
var table = $t[i];
var c = table.getAttribute('class') || table.getAttribute('className');
if(c !='saki-tall') continue;
var tr = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
var tl = tr.length;
for(var j = 0; j < tl; j++){
var td = tr[j].getElementsByTagName('td');
var tall1 = td[1].textContent * 1,
tall2 = td[3].textContent * 1;
if(!isNumber(tall2) || tall2 <= 0){
td[4].classList.add('noData');
}
else{
var ratio = (tall2 / tall1 - 1) * 100,
ri = Math.abs(parseInt(ratio * 10));
td[4].style.backgroundColor = 'rgb('
+ (255 - (ratio>0? ri:0)) + ','
+ (255 - ri) + ','
+ (255 - (ratio<0? ri:0)) +')',
td[4].textContent =
((ratio > 0)? '+': (ratio==0)? '±': '') + ratio.toFixed(1);
}
}
}
}());
む、よく見たらtall1(キャラの身長)が0の時の場合分けをしていない。そもそも身長データが存在するキャラしかいないので問題ないんですが、ちょっともやもやするわね…
キャストの身長が高い時は
background-colorプロパティに指定するrgb()関数の赤と緑の数値を減らして青っぽくし、低い時は青と緑の数値を減らして赤っぽくしています。ちなみに
noDataというCSSクラスは
td.noData{
background: #ccc;
text-align: center!important;
}
td.noData::before{
content:'──';
}
こんな感じ。算出元のデータが無い時、背景色をグレーにして横棒を表示します。なお、変数が数値かどうかを判定する
isNumber()関数は、こちら↓のサイト様の記事からコピペさせていただきました。
JavaScript で数値判定 - にょきにょきブログここに記して御礼申し上げます。
コメント