特定の階層構造を持つオブジェクトにアクセスする (prototype.js)

説明

prototype.js ver 1.5以降では特定の階層構造を持つエレメントだけを取得することができます。getElementsBySelector("div span")とすると子孫セレクタの指定になります。このセレクタ指定はスタイルシートの定義の際に指定できるものが利用できます。
getElementsBySelector("div span")で取得したエレメントに対して処理を行いますが、prototype.jsではfor()ではなくeachを使って繰り返し処理を行うことができます(イテレータ)。each()を使う事で繰り返しに必要は変数や繰り返し回数などを記述する必要がなくなり記述ミスによる不具合が減少します。
each()で繰り返す際に呼び出す関数にはgetElementsBySelector()で取得したエレメントへの参照がパラメータとして渡されます。サンプルでは渡されたエレメントのスタイルシートを操作することで文字を赤色に変更しています。
JavaScriptテクニック ブック  詳しい解説などはJavaScriptテクニック ブックを参照してください。

サンプルコード [実行]

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>JavaScript Sample</title>
<link rel="stylesheet" type="text/css" href="main.css" media="all">
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<h1>特定の階層構造を持つオブジェクトにアクセスする</h1>
<form action="./access.cgi" method="get" id="mainForm" name="mainForm">
<input type="button" id="setButton" value="div span階層だけ文字色を赤色にする">
</form>
<div id="contents">
<div class="note">ここはdivのみ</div>
<div class="note"><span>divとspanの階層</span></div>
<div class="note"><span>divとspanの階層</span>ここはdiv</div>
<div class="note">ここはdivで<span>ここはdivとspanの階層</span></div>
<p class="note"><span>ここはpとspan</span></p>
</div>
</body>
</html>

window.onload = function(){
document.getElementById("setButton").onclick = function(){
$("contents").getElementsBySelector("div span").each(function(obj){
obj.style.color = "red";
});
}
}