classNameを追加したり削除したりトグルしたり。
本当はHTMLElement.prototypeにプロパティを追加したいんだけど,Greasemonkeyがそれを許してくれないようだ。だから関数として定義してみた。
function equalTo(x) { return function (y) { return x == y;} } function notEqualTo(x) { return function (y) { return x != y;} } Array.contains = function(array, x) { return Array.some(array, equalTo(x)); } Array.prototype.contains = function(x) { return Array.contains(this, x); } function appendClassName() { var elem = Array.shift(arguments); var classNames = elem.className.split(/\s+/); Array.forEach(arguments, function(name) { if(!classNames.contains(name)) classNames.push(name); }); elem.className = classNames.join(' '); } function removeClassName() { var elem = Array.shift(arguments); var arg = arguments; elem.className = elem.className.split(/\s+/).filter(function(exist_name) { return !Array.contains(arg, exist_name); }).join(' '); } function toggleClassName() { var elem = Array.shift(arguments); var classNames = elem.className.split(/\s+/); Array.forEach(arguments, function(name) { var old_len = classNames.length; classNames = classNames.filter(notEqualTo(name)); if(old_len == classNames.length) classNames.push(name); }); elem.className = classNames.join(' '); }