プロが教えるわが家の防犯対策術!

お世話になっております。

javascript、または何らかの方法で、特定の条件にあうHTML要素のCSSプロパティを一括で書き換える方法を探しております。
Dreamweaverを使っているのでビヘイビアでできないか試してみましたが、ID単位で要素を扱うので複数のレイヤーを同時に表示・非表示することはできないようでした。


以下、やりたいことの一例です。下記のように、ボタンを押すとその条件に合わないclassの要素を「display:none」状態したいと考えています。

------------------------------------------------------------------
[イヌ表示ボタン]  [ネコ表示ボタン] [両方表示ボタン]

<div class="dog">ダルメシアン</div>
<div class="cat">ロシアンブルー</div>
<div class="dog">柴犬</div>
<div class="dog">チワワ</div>
<div class="cat">シャム</div>
<div class="cat">ヒマラヤン</div>
<div class="cat"アビシニアン</div>
<div class="dog">ゴールデンレトリーバー</dog>

イヌ表示ボタンを押したときは、class="cat"がdisplay:noneになり、
のブラウザ上では犬だけがピックアップ表示される。


<div class="dog">ダルメシアン</div>
<div class="dog">柴犬</div>
<div class="dog">チワワ</div>
<div class="dog">ゴールデンレトリーバー</dog>
------------------------------------------------------------------
実際にはボタンで操作するだけではなく、たとえば犬ページ、ネコページを同じコンテンツに更新し、ロードイベントだけ異なった記述をするだけで、それぞれのページに適切なコンテンツのみ表示をさせたりしたいと考えております。

恐れ入りますが、何卒、よろしくお願い致します。

A 回答 (2件)

『指定範囲内のdiv要素について、チェックして(表示/非表示)する』みたいなことでよいのでは?



class指定のないdivは常に(非表示/表示)とするのか、両方あると思いますがこんなのではどうでしょうか?
* load時は対象を指定して fuga() を実行するようなことでよいかと…
(全角空白は半角に)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>sample</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">

<script type="text/javascript">
<!--
function hoge(evt){
 var t = evt.target || evt.srcElement;
 if(t.nodeName=="BUTTON")
  fuga(t.getAttribute("name"));
}

function fuga(str){
 var div = document.getElementById("item_list").getElementsByTagName("div");
 for(var i=0, d; d=div[i++];)
  if(d.className){
   var reg = new RegExp("(^|:)" + d.className + "(:|$)");
   d.style.display = reg.test(str)?"block":"none";
  }
}
//-->
</script>
</head>

<body>

<div onclick="hoge(event)">
<button type="button" name="dog">犬表示</button>
<button type="button" name="cat">猫表示</button>
<button type="button" name="dog:cat">犬猫表示</button>
</div>

<div id="item_list">
<div class="dog">ダルメシアン</div>
<div class="cat">ロシアンブルー</div>
<div class="dog">柴犬</div>
<div class="dog">チワワ</div>
<div class="cat">シャム</div>
<div class="cat">ヒマラヤン</div>
<div class="cat">アビシニアン</div>
<div class="dog">ゴールデンレトリーバー</div>
<div>クラス指定のない要素</div>
</div>

</body>
</html>
    • good
    • 0
この回答へのお礼

お礼遅くなりまして大変すみませんでした。

さらにお伺いしたいことがあったのですが、多忙で内容がまとまらず、今まで時間がかかってしまいました。

いろいろなサイトで勉強して、教えて頂いた方法を自分でも使いこなせるようになりました。が、jQueryという便利なものがあると知り、そちらを利用することにしました。

どうもありがとうございました!

お礼日時:2012/01/15 03:42

jQuery.jsを使うと


簡単に実現できます。

class="dog"を一括表示処理
$(".dog").show();
class="dog"を一括非表示処理
$(".dog").hide();
    • good
    • 0
この回答へのお礼

お礼遅れましてすみません。

おっしゃった方法で実現することができました。
その後jQueryを勉強しまして、いろいろと応用して役立てられております。

ありがとうございました!

お礼日時:2012/01/15 03:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!