またもカブる
【JS】phpで作成した多数のdivを操作したい
http://oshiete.goo.ne.jp/qa/8034381.html
FUjillin さんとかぶる。
正規表現のとこは、うっしっし。
スペースが続く場合もあるし。
本日、睡眠時間まじ30分。ほぼ徹夜。テンションが高くてもう眠れない。
なので、HTMLにして回答。ばか丸出し。
追記。
500は、少なすぎた。50000くらいにしておけば良かった。
後記
LancerVII さんに点数が寄与された。それはないぜ〜!
<!DOCTYPE html> <title>子は親を見て育つ</title> <meta charset="UTF-8"/> <style> body { width : 40em; } div.hoge { border: 3px red double; } em { color:gray; } </style> <body> <h1>親のブロック構造を探して弄る</h1> <dl> <dt>> divが縦に沢山ならび、リストとしています。 <dd> <p>ならば、DIV要素を使わずリスト要素を使うべきです。<br> <em>CSS で、list-style: none; とするだけでよくね?</em> <dt>子要素からは、node.parentNode で親を特定できる <dd> <p>ボタンが子要素ならば、親をたどります。 <p>しかし、その親を特定する名前が必要です。<br> 今回は、className を利用してはどうでしょうか? <p>className には、空白で複数指定できるのですから、 それをチェックするには、注意が必要です。 </dl> <h2>コピーするサンプル</h2> <div class="hoge"> <h3>これは、サンプルのDIV要素です</h2> <p> なんだよ!丁寧に回答しても、無視するやつ! <input type="button" name="change" value="顔色を変える"> </div> <h2>実行手順</h2> <ol> <li>まず、実験的にスクリプトで div 要素を沢山つくります。 <input type="button" name="make" value="作る"> <li>それぞに出来た<input type="button" name="dmy" value="顔色を変える">を、 苛立ちをあらわにしてクリックします。 <li>動かないと思ったら、これは IE のことなど考慮しない仕様だからです。 <li>jQuery を持ち出すほどのことは、ありません。 </ol> <h2>イベントの実装</h2> <ul> <li>クリックイベントは、バブリングします。なので、document で監視します。 <li>呼び出されたハンドラの第1引数には、そのイベントオブジェクトが勝手に プレゼントされます。素直に受けとりましょう。 <li>event.target で、クリックした要素が判別できます。もしその、要素が ボタンなら名前を見て、次に何をすべきか教え込みます。 <li>もし、親の className が、 "hoge" だったら、望んでいた行為におよびます。<br> 今回は、背景をランダムに色を変えます。 </ul> <h2>実行結果</h2> <div id="view"></div> <script> function make () { var origin = document.querySelector ('div.hoge'); var view = document.querySelector ('#view'); for (var i = 500; i--; ) view.appendChild (origin.cloneNode (true)); } function r (n) { return Math.floor (Math.random () * n); } function color (e) { e.style.background = 'rgb(' + r(256) + ',' + r(256) + ',' + r(256) + ')'; } function change (e) { var isHoge = /(^|\s+)hoge(\s+|$)/; var prt = e; while (prt = prt.parentNode) if (prt.className) if (isHoge.test (prt.className)) return color (prt); } function handler (event) { var e = event.target; if ('INPUT' === e.tagName) if ('button' === e.type) switch (e.name) { case 'make' : make (); break; case 'change' : change (e); break; case 'dmy' : alert ('これじゃないから');break; } } document.addEventListener ('click', handler, false); </script>