しかし、もちろん!例えば:
function toggleSingle(elementId) {
var el = document.getElementById(elementId);
if (el.style.display === 'none') {
el.style.display = 'block';
}
else {
el.style.display = 'none';
}
}
この関数は、コレクションで動作する別の関数で使用できます。
function toggleMultiple(elementIds) {
if (! (elementIds && elementIds[0]) ) {
// elementIds is not an array, should exit (and warn the developer as well perhaps)
return;
}
for (var i = 0, l = elementIds.length; i < l; ++i) {
toggleSingle(elementIds[i]);
}
}
これを 1 つではなく 2 つの関数として記述したのはなぜですか? この場合、それはおそらくやり過ぎですが、一般的に、「個々の」アイテム処理を別の関数に分けることがよくあります。これにより、コードが読みやすくなり、テストがよりシンプルになります。それでも、次のようなもので全能関数を書くことができます:
function toggleSmart() {
for (var i = 0, l = arguments.length; i < l; ++i) {
var el = document.getElementById(arguments[i]);
if (el.style.display === 'none') {
el.style.display = 'block';
}
else {
el.style.display = 'none';
}
// and another way to do it: more concise, but less readable for some:
// var display = el.style.display;
// display = display === 'none'
// ? 'block'
// : 'none';
}
}