• ベストアンサー

javascriptで特定のオブジェクトのCSSの書換え

javascriptでCSSの書換えをしたいと思っているのですが、うまくいきません。 例えば、 <div class="aaa" style="z-index:0;">aaa</div> <div class="aaa" style="z-index:1;">bbb</div> <div class="aaa" style="z-index:2;">ccc</div> <div class="aaa" style="z-index:3;">ddd</div> <div class="bbb">111</div> <div class="bbb">222</div> <div class="bbb">333</div> このようにあったときに、≪z-indexの要素が1以上≫のclass="aaa"のオブジェクトを探して、該当するものの≪z-indexの値から-1する≫というような関数を作りたいのですが、ループの記述で困っています。 (prototype.jsを使うので、getElementsByClassNameは使えます。) 詳しい方、ご教授いただければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • OKbokuzyo
  • ベストアンサー率43% (130/296)
回答No.1

私はjquery派なんだががが‥ z-indexなら.style.zIndexで取得、設定ができますよ。 具体的に言うと (prototype.jsはあんまり使ったことないので getElementsByClassNameの使い方は推測で記載します。) var nodelist = getElementsByClassName("aaa"); for (var i = 0, intLen = nodelist.length; i < intLen; i++){ if (nodelist[i].style.zIndex >= 1){ nodelist[i].style.zIndex -= 1 } } 未検証なので間違いがあったらテキトーに直してくださいな。

その他の回答 (2)

回答No.3

<div class="aaa" style="z-index:0;">aaa</div> <div class="aaa" style="z-index:1;">bbb</div> <div class="aaa" style="z-index:2;">ccc</div> <div class="bbb">111</div> <script type="text/javascript"> function hoge( n, c ) { var es = document.getElementsByTagName( n ), i = 0, e; var r = new RegExp( '(^|\\s)' + c + '(\\s|$)' ); while( e = es[ i++ ] ) if( r.test( e.className ) && e.style.zIndex > 0 ) --e.style.zIndex; } hoge('div', 'aaa'); var o,objs=document.getElementsByTagName('div'),c=0; while(o=objs[c++]) alert(o.style.zIndex); </script> だめかなぁ~

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

prototype.jsを使って window.onload = function () { var aaa_elements=document.getElementsByClassName("aaa"); aaa_elements = $A(aaa_elements); aaa_elements.each(function(element){ if(element.style.zIndex >=1 ){ element.style.zIndex=element.style.zIndex-1; } }); } となります。 注意点)  prototype.jsのgetElementsByClassNameとFirefox3.0以上で 標準サポートされるgetElementsByClassNameがかぶってしまい 返されるオブジェクトが異なるので、aaa_elements = $A(aaa_elements); として、prototype.jsの配列オブジェクトに入れなおしています。  それから、この方法ではstyle属性でz-indexをセットしているものしか 拾えません。

関連するQ&A

  • Javascriptを使うのか、CSSでできるのか…?

    初心者です。 持っている本のリストを作っています。 フリーのCGIプログラムを使用しています。 <html> <head> <title>[name.]</title> <style type="text/css"> ~~~ </style> </head> <body bgcolor="#000000"> <div id="title1">[name.]</div> <message> <table class="zzz"> <tr> <td class="no1">[$AAA.]</td> <td class="no2">[$BBB.]</td> <td class="no3">[$CCC.]</td> </tr> </table> </message> </body> </HTML> [$AAA.]の部分にはタイトル、[$BBB.]の所には作者名、[$CCC.]のところには未読or既読 が表示されます。 <message>~</message> の中の情報が繰り返されることになります。 class="no..."の部分はCSSでデザインを定義しています。 そこでご相談なのですが、例えば[$CCC.]の部分に「既読」と入力すると、その作品の行に色が付くようにできないでしょうか。 (この作品は既読だと、パッと見てわかりやすいようにしたいのです) Javascriptを使うのか、CSSでできるのか…。何を使うのかすらわからない状況で困っています。 質問もおかしいところがあるかと思いますが、よろしくお願いします。

  • JavaScript初心者です。URLの末尾に含まれる文字列を名前にもつclassのstyleを変更したいです。

    JavaScript初心者です。 URLの末尾に含まれる文字列を名前にもつclassのstyleを変更したいんですが。。 URLに含まれる文字列を名前にもつidのスタイル変更については解決したのですが、同様のことclassでもやりたいと考えています。 例えばURLの末尾が /index.html?AAA&BBB となっている場合、非表示だったAAAとBBBのdivを表示するということをやりたいです。 ソースは以下になります。 前半でURLの末尾を取得して、後半でclassのスタイルを書き換えているつもりです。それぞれでは動作するんですが、あわせると動作しません。自分はかなり初心者ですので、根本的な誤りがあるかもしれませんが、ご教授よろしくお願いします。 <html> <head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title>test</title> <style type="text/css"> <!-- .AAA,.BBB,.CCC { width:200px; background-color:#ccc; margin:10px; display:none; } --> </style> <script language=javascript> <!-- function changeStyle(){ var query = window.location.search.substring(1); var search = query.split("&"); for (var i = 0; i < search.length; i++) { var XXX = search[i]; } var allElement = document.getElementsByTagName('*'); for (var j = 0; j < allElement.length; j++) { if (allElement[j].className=='XXX') { allElement[j].style.display = "block"; } } } --> </script> </head> <body onload=changeStyle();> <div class="AAA">111</div> <div class="AAA">222</div> <div class="AAA">333</div> <div class="BBB">444</div> <div class="BBB">555</div> <div class="CCC">666</div> <div class="CCC">777</div> </body> </html>

  • sedで特定行を抽出したいです

    はじめまして、 下記のようなファイルがあり、sedで特定文字列(@@@, @@@@, @@@@@)を含む行のみを一回で抽出したいです。 sed -n -e "/p=300/,/eee/p" input > output' だと 不要な行も入ってしまいます orz... sedはWindows上のsed Logos 2.42を使用しています。 どのように書けば対象行のみを抽出できるか、ご教授をお願いいたします。 [ 読込み対象ファイル ] ***, @@@, @@@@, @@@@@は雑多な文字列 最初に不要な行が10~15行 <div class="aaa"> <a href="http://www.***.***/?p=300&***">@@@</a> </div> <div class="bbb"> <ul class="ccc"> <li class="ddd">@@@@</li> <li class="eee">@@@@@</li> <div class="aaa"> <a href="http://www.***.***/?p=300&***">@@@</a> </div> <div class="bbb"> <ul class="ccc"> <li class="ddd">@@@@</li> <li class="eee">@@@@@</li> 以下<div class="aaa">から<li class="eee">@@@@@</li>まで20回繰り返し。

  • EXCELで行の先頭データが同じ行の削除方法について

    EXCELで次のようなことをしたいのですがどうしたら簡単にできるでしょうか?  AAA   AAA  AAA  AAA  AAA  BBB  BBB  BBB  CCC  DDD  DDD  DDD  DDD 上ようのなデータで重複している部分を削除し、  AAA  BBB  CCC  DDD としたいのですが。 今は一行々々で確認しながら削除してます。3000行程あり困ってます。 どうしたら簡単にできるでしょうか?  

  • C言語でのファイル検索&ファイル書き換えについて

    C言語である特定のフォルダを指定して、その階層内(サブフォルダも含む)にあるファイル、例えばsample_nameをファイル名に含むファイルを見つけ、そのファイル内の例えば下のような書き換えを行えるようなプログラムはどうつくればいいのでしょうか。 元ファイル ~sample_name1.txt~ aaa, 10 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 30 ccc, 12 bbb, 20 ddd, 15 上のように各ファイルにaaaやbbbが共通に含まれています。 対象ファイル:sample_name 対象文字列:aaa 変換後:100 変換後ファイル ~sample_name1.txt~ aaa, 100 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 100 ccc, 12 bbb, 20 ddd, 15

  • ファイルの結合

    UNIX上で下記のようなfileA、fileBから fileA aaa,aaa,222 aaa,bbb,111 aaa,ccc,333 fileB aaa,aaa,111 aaa,bbb,222 aaa,ccc,333 aaa,ddd,999 下記のようなfileCを作ろうとしています。 fileC aaa,aaa,222 aaa,bbb,111 aaa,ccc,333 aaa,ddd,999 そこで、以下のように一列目と2列目をキーにして、sortすることにしました。 cat fileA fileB | sort -u -k1,2 -t, > fileC すると、fileCは下記のようになりました。(一行目の3列目が222ではなく、111になってしまいました) fileC aaa,aaa,111 aaa,bbb,222 aaa,ccc,333 aaa,ddd,999 キー項目以外はfileAを優先させたいのですが、なにか良い方法はないでしょうか?

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • awkやsed等で特定の文字間を抜き出す

    cat text aaaa bbbb <AAA> ccc ddd <BBB> eee とあるときに <AAA> ccc ddd <BBB> だけ抜き出したいです。 どのようにすればよいでしょうか?

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。

  • この場合のCSSの記述を教えてください!

    現在コーディング中なのですがIE6,7では問題ないのですが、Firefox,OPERA,netscapeにてずれて表示されてしまいます。 鯨飲がさっぱり分からない状態で・・どなたかお分かりになる方いましたらご教授願います(泣) ■html <div id="aaa"> <div id="bbb">コンテンツ</div> <div class="ccc">コンテンツ</div> </div> ■css #aaa { width: 640px; height: 300px; float: left; } #bbb { width: 640px; height: 150px; background-image: url(images/背景画像.gif); background-repeat: no-repeat; } .ccc { width: 640px; height: 150px; } ■状況 640px×300px(aaa)の枠の中に(bbb,cccを)収めたいのに300を超えて(bbbの上部に約100px程度のが出来る)表示されてしまう。 (bbbの背景画像サイズは640px×150px) ■いじってみて bbbに「border: 1px #000000 solid;」を追加するとスペースはなくなる。 以上が状況です。よろしくお願いいたします!

専門家に質問してみよう