• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:getElementsByClassName使い方)

getElementsByClassName使い方

このQ&Aのポイント
  • JavaScriptのgetElementsByClassNameを使って、指定されたクラス名を持つ要素を取得する方法について教えてください。
  • getElementsByClassNameを使用して、tag2とtag3のstyle属性を削除する方法を教えてください。
  • 質問のスクリプトが動作しない理由や改善方法についても教えてください。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

getElementsByClassName()はnodeListを返すメソッドです。 ご提示のコードで、this.attrは何を示しているおつもりでしょうか? filterを使えるブラウザを対称にするなら、querySelector()を利用した方が使いやすいかも。 コードの内容がよくわかりませんが、標題が「getElementsByClassName()」なので、abcをクラスに持つ要素からfilterでtag2、tag3を選んでstyle属性を削除するというのであればこんな感じ? var hoge = function(cls){ [].filter.call(document.getElementsByClassName(cls), function(e){ return /^tag[23]$/.test(e.textContent); }).map(function(e){ e.removeAttribute( 'style' ) }); } hoge("abc"); (fxにて動作を確認。最初に書きましたように、nodeListなので、filterメソッドを直接には使えません。) テキストの「tag2」、「tag3」を見るのではなく、2番目以降の要素を対象とするのでよければ  function(_, i){ return i>0; } のようなcallbackにすればよろしいかと。 >style="color: #cccccc;" を削除するには~~ このコードが実行されるまでに他のスタイル属性が設定されている「かも知れない」ことを考慮するなら、style属性そのものを削除してしまうというご提示の方法は考え物のような気もしますが…

yukiling
質問者

お礼

回答ありがとうございます。 ブラウザはスマートフォンものが主な対象です。 style 属性そのものを削除する感じで問題ありません。 当初は class 属性を持つ全てを対象にと、考えてました。 しかし、class は複数種のタグにかかることもあるので、 タグによっても絞込みしないととおもい、 最後に同タグの中からも絞り込みたいと最終的に考えました。 js 難しいですね。いろいろ調べましたが、特に記述が様々。 >>[].filter >>nodeListなので、filterメソッドを直接には使えません。 というのも初めて知りました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列の表示/非表示

    下記のコードで、ボタンを押すたびに、 sample1 sample2 sample3 の3個の文字列の非表示/表示が切り替わるようにしたいのですが、 alert(elements.length+"個の要素を取得しました"); の実行で、class="sample"のエレメントの個数は正しく取得できているようなのですが、 elements.style.display = elements.style.display == "none" ? "block" : "none"; で非表示/表示が切り替わってくれません。 何か書き方が悪いのでしょうか? ご経験のある方、御教示ください。 <html> <head> <title>document.getElementsByClassName - class名を元にエレメントを取得する</title> </head> <!--class名を元にエレメントを取得するのサンプル--> <script type="text/javascript" src="prototype.js"></script> <script type="text/javascript"> <!-- function execute() { var elements = document.getElementsByClassName("sample"); alert(elements.length+"個の要素を取得しました"); elements.style.display = elements.style.display == "none" ? "block" : "none"; } //--> </script> <body> <div id="sample1" class="sample" style="display:none;">sample1</div> <div id="sample2" class="sample" style="display:none;">sample2</div> <div id="sample3" class="sample" style="display:none;">sample3</div> <button onclick="execute()">サンプル実行</button> </body> </html>

  • removeAttribute()メソッドで削除できないスタイル

    スタイル属性を思ったように削除できなくて困っています。 <script language="JavaScript"> function a() { document.getElementsByTagName("div")[0].style.removeAttribute('color'); } function b() { document.getElementsByTagName("div")[0].style.removeAttribute('border'); } </script> <div style="color: #ff0000; border: 5pt solid #0000ff;">要素</div> <input type="button" value="削除1" onClick="a()"> <input type="button" value="削除2" onClick="b()"> 削除1を押すと「要素」のcolor属性が削除されますが、削除2を押してもborder属性が削除されません。removeAttribute()メソッドは動作が不安定なんですか?

  • jqueryでajaxsuccessの内側this

    いつもお世話になっております jqueyで質問なのですが、ajaxの成功したときに起動する successの内側で$(this).val()を呼び出し、CSSにアクセスしたいのですが 期待した動作にはなりません。 期待する動作 それぞれクリックすると「1」「2」「3」と出て背景が赤くなる。 実際の動作 エラー「e.nodeName is undefined」となります。 どなたか、successの内側から$(this)にアクセスする方法をご存知の方いらっしゃいませんでしょうか 他の方法で期待の結果になるようにではなく、successの内側から$(this)にアクセスする方法が知りたいです お忙しい中恐縮ですが、分かる方がいたら嬉しいです <input class="hoge" value="1" /> <input class="hoge" value="2" /> <input class="hoge" value="3" /> <script type="text/javascript"> $(document).ready(function() { $('.hoge').click(function(){ $.ajax({ url: "some.html", cache: false, success: function(){ alert( $(this).val() ); $(this).css('background-color','red'); } }); }); }); </script>

  • floatについて

    ■ □ と並んでいた場合■にスタイルシートでfloat:leftとすると□が右にきますよね。( ■□となる) それで私はfloat:leftは『次に来る要素を自分の右に移動させる』と 解釈してました。 それで質問なのですが以下のタグの場合どうして最後に(.set1)にfloat:leftが必要なのでしょうか? 次に要素がきていないからあっても意味がないと思ったのですが、実際 はずしてみると間に幅ができてデザインが崩れてしまいます。 また全体の枠を見えるよう最初のdivに.wakuで設定したのですがfloat:leftがあるときには長い一本の線になってしまいます。 どうしてこうなるのでしょうか? <html> <head> <style type="text/css"> .waku{border-color:#cccccc;border-style:solid;border-width:3px;} .set1{border-color:#cccccc;border-style:solid;border-width:1px; width:150px;height:500px;background-color:white;color:#ffffff; margin:0 2.5;float:left;} .main{border-color:#cccccc;border-style:solid;border-width:1px; width:500px;height:500px;background-color:white;color:#ffffff; margin:0 2.5;font-weight:bold;float:left;} .set2{border-color:#cccccc;border-style:solid;border-width:1px; width:150px;height:500px;background-color:white;font-weight:bold; color:#ffffff;margin:0 2.5;float:left;} </style> <div class="waku" align="center"> <div class="set1"> <div>左1</div> <div>左2</div> </div> <div class="main">真ん中</div> <div class="set2">右</div> </div>

    • ベストアンサー
    • HTML
  • JavaScriptのdiv.style属性の変更が反映されない:最後

    JavaScriptのdiv.style属性の変更が反映されない:最後のDivタグを除いたすべてのDivタグに改ページ属性を有効にするようJavaScriptで制御したいと考えています。しかし、以下のようなプログラムでは、スタイル属性が更新されず改ページが実行されてしまうため、1枚真っ白な紙が印刷されることになってしまいます。こちらの意図したように動作させるにはどうしたらよいでしょうか。 <html> <head> <style> div.test { page-break-after:always; color:black; } </style> <script type="text/javascript"> window.onload = function() { var divs = document.getElementsByTagName('div'); for(i = divs.length - 1; i >= 0; i--){ if(divs[i].className == "test"){ divs[i].style.pageBreakAfter = ""; break; } } }; </script> </head> <body> <div class="test">テスト</div> <div class="test">テスト</div> <div class="test">テスト</div> </body> </html>

  • classList で、class名が付かない。

    classList を使用して、新規で div タグに class 名を付けようと思っています。 div に id 名を付け、それを対象とした場合は、class 名は付きますが、 id名を含めない タグのみでは、class 名は付かないのでしょうか? コードは以下記述の通りです。 ご回答どうぞよろしくお願いいたします。 <html> <head></head> <body> <div id="hoge">class-name on tag.</div> <script> var dom = document.getElementById( 'hoge' ); //以下のように使えるなら理想です。 //var dom = document.getElementByTagName( 'div' ); dom.classList.add( 'test' ); </script> </body> </html>

  • HTMLDivElement等の比較、評価について

    記述の HTML コード div、p タグに、同じクラス属性値 abc が付いています。 あくまで例として記述したものですが クラス属性値 abc で div の場合はアラート OK! が表示されるようにしたいのですが、if 中で、div=[object HTMLDivElement]とでは、違う為、 アラート OK!とはなりません。 どのようにすれば if 中で評価出来るようになりますでしょうか ? みなさま、どうぞご回答よろしくお願いいたします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>Test</title> </head> <body> <div class="abc"></div> <p class="abc"></p> <script> var tags = document.getElementsByClassName( 'abc' ); var targetTags = 'div'; for( i = 0; i < tags.length; i++ ) { if( targetTags.indexOf( tags[i] ) == 0 ){ alert( 'OK!' ); } } </script> </body> </html>

  • onmouseoverはCSS参照に含められるか?

    <div style="color: blue;" onmouseover="this.style.color='red'" onmouseout="this.style.color='blue'">あああ</div>を、 <style type="text/css"> <!-- div { onmouseover="this.style.color='red'"; onmouseout="this.style.color='blue'; } --> </style> みたいには書けませんか? a:hoverだったらできるのは承知していますが、 タグが<a>でなく<div>なので、onmouseover、onmouseoutを使わざるを得ず、 さらにonmouseover、onmouseoutはCSSでなくJSだと思うのですが。

    • ベストアンサー
    • CSS
  • 複数の要素を表示してる時だけアクションを。

    <div style="display:block" class="diva">hoge</div> <div style="display:block" class="divb">hoge</div> .divaのみ表示している場合は下記で問題ないのですが、 <script type="text/javascript"> $(function(){ if($('.diva').is(':visible')) { //action } }); </script> .diva と .divb の両方がdisplay:blockだった時のみ アクションさせたい時の条件式はどのようになるのでしょうか?

  • location.hashの遷移

    jQueryを使ってウィザード形式の画面を作ろうとしております。 「次へ」のリンクは画面に一つだけ設置し、動的にリンク先のハッシュを変えるようにし、 画面は、リンク先のIDボックスを表示するという仕組みです。 しかし、以下のコードで実行すると、画面は指定したものが表示されますが、アドレスには一つ先の飛び先が表示されます。 この現象が、どういうことかわかりませんので、どなたか教えて頂けないでしょうか? <!DOCTYPE html> <html><head><meta charset="utf-8" /><script src="http://code.jquery.com/jquery-1.9.0.min.js"></script> <script> $(function(){ $('#next').click(function(){ $('.page').hide(); $($(this).attr('href')).show(); $(this).attr('href','#step2'); }); }); </script> </head> <body> <a id="next" href="#step1">次へ</a> <div id="top" class="page">top</div> <div id="step1" class="page" style="display:none;">step1</div> <div id="step2" class="page" style="display:none;">step2</div> </body> </html>