• ベストアンサー

javascriptで困っています。

Javascriptで <div id='abc' class='xyz'> とあるdivタグに2つめのclass属性を追加したり、削除するにはどうしたらいいのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

解説しましょう >var n=document.getElementById("abc"); 「abc」というidのついたタグをnとします。 >var reg=new RegExp('(^| )hoge(?= |$)'); 正規表現オブジェクトを宣言しています (^| )・・・先頭「^」もしくはスペースの後ろにある hoge・・・hogeという文字 (?= |$)・・・後ろはスペースか末尾「$」 ちなみに正規表現というのは複雑なマッチングをするときに使う規則で 慣れるまで書式がわかりにくいので、やる気がある場合は一度 勉強してみると思い白いかも。 >var cn=n.className; nのクラス名をとりあえずcnという名前をつけておいて >n.className=cn.match(reg)?cn.replace(reg,''):cn+' hoge'; nの新しいクラス名は さっきつくった正規表現オブジェクトregにマッチするか? マッチするならcnのマッチした箇所を削除する(''と置き換える) マッチしないならcnにスペース+hogeをつける。 「xxx?yyy:zzz」という構文は三項演算子といってif文に近い感じの処理です ちなみに微妙なゴミが気になる場合は n.className=(cn.match(reg)?cn.replace(reg,''):cn+' hoge').trim(); といったトリムをする処理を入れた方がベター

dkong
質問者

お礼

ありがとうございます 丁寧な解説でとてもよくわかりました。 調べているときに、正規表現という言葉をときどき見かけていたのですが、何かよく分からずとばしていました。今回解説していただいたことを期に勉強したいと思います。プログラム初心者にも分かりやすい解説ありがとうございました。また、よろしくお願いします。

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

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

たとえばこんな感じ <script> function changeabc() { var n=document.getElementById("abc"); var reg=new RegExp('(^| )hoge(?= |$)'); var cn=n.className; n.className=cn.match(reg)?cn.replace(reg,''):cn+' hoge'; } </script> <style> .xyz{color:red;} .hoge{background-Color:yellow;} </style> <div id='abc' class='xyz'>123</div> <input type="button" value="go" onclick="changeabc()">

dkong
質問者

お礼

ありがとうございます。思っていたようになりました。 素早い対応をしていただき、本当に助かりました。 クリックするたびにclass属性をつけたり、とったりしているんですよね。まだまだプログラミングの初心者なので、作っていただいたもんが、どんな内容か理解できません。もし、よかったら、解説などよろしくお願いします。肝心な部分の var reg=new RegExp('(^| )hoge(?= |$)'); と n.className=cn.match(reg)?cn.replace(reg,''):cn+' hoge'; が理解できていません。中でも^|や?はどうよういうことを表していますか?

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

関連するQ&A

  • classの中の<a>タグにidを追加

    div class内のaタグにidを追加できる方法がないかを模索しておりますが、検索では直に(タグ)にidやclassを追加する方法しか出てきませんでした。 もしかしたら、突拍子もないことを言っているかもしれませんが JavaScriptに詳しい方アドバイス宜しくお願い致します。 id、classを割り当てるためのメソッド attr(属性, 属性値) $(function(){ $('ul').attr('id', 'style-ul'); $('li').attr('class', 'style-li');}

  • JavaScriptを用いた文字列置換

    JavaScriptを用いて、以下のようなことが可能でしょうか。 <div class="test"> <A Href="http://xxx"> <Img Src="hoge.gif"> </A></div> 上記タグを下記タグに置換したいです。 <div class="test"> <Img Src="hoge.gif"> </div> ようはAタグを丸々削除したいのですが、JavaScriptで可能でしょうか。 お分かりの方お教え下さい。

  • javascriptでのclass属性変更について教えて下さい。

    javascriptでのclass属性変更について教えて下さい。 html上でclass=tripleがあるとして、javascriptでたとえば、color="red"を適応するにはどうすればいいのでしょうか?お解りになるかた、教えてください。 <div class="triple"><p>あ</p></div>

  • 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>

  • JavaScript 可変スクロールバーについて

    http://manos.malihu.gr/tuts/jquery_custom_scrollbar.html こちらに掲載されているスクロールバーを引用してサイトを作っていますが、 このまま使おうとすると、 <div class="content"></div>内の内容がheight以上であれば、指定位置にスクロールバーが出てきますが、 私が行いたいことは、 <div class="content" id="id1"> ここにコンテンツを書き込む </div> <div class="content" id="id2"> <a name="abc">abc</a> <div id="123"> something_123 </div> <a name="def">def</a> <div id="456"> something_456 </div> </div> id1およびid2はボタンによって表示が切り替わるようにしてあり、 id2内のclassは<a>タブによって表示、非表示が可能です。 この時に、初期状態ではid1を表示させるとしたとき、 id1の内容がheightに指定した高さより小さく、 id2の内容を全て展開させるとheightの値を上回るとすると、 id2を展開させても、スクロールバーが表示されないことで困っています。 どのようにJavascriptのコードを書き換えれば、可変するDivに対応するようになるでしょうか?

  • javascriptにて特定の文字置換

    いつもサイトを拝見させていただき勉強させてもらっておりますsasaloと申します。 javascriptにて1点調べていたのですがどうしてもうまくいかなくお分かりになる方がおられましたら ご教授いただけないでしょうか? どうぞよろしくお願いします。 早速ですが、件名に書かせていただきました、javascriptにて特定の文字置換を行いたく思いましてどこが悪いのか私の知識不足でうまく動作しません。 ▼HTMLソース <div class="aaa"> <p id="sell_txt">abcショップで販売</p> </div> <div class="aaa"> <p id="sell_txt">売約済</p> </div> <div class="aaa"> <p id="sell_txt">abcショップで販売</p> </div> こちらのソースのabcショップで販売という文字を売約済と変更したいです。 また<p id="sell_txt">abcショップで販売</p>はページの中でいくつ出てくるのかはページによってことなり多いページでは50以上ということもあります。 ▼javascript window.onload=function(){ if(document.getElementById('sell_txt').innerHTML = 'abcショップで販売'){ document.getElementById('sell_txt').innerHTML = '売約済'; } } こちらのjavascriptを記述して適用しているのですが、初めに出現してくる<p id="sell_txt">abcショップで販売</p>のみの1つが売約済にかわり、残りは<p id="sell_txt">売約済</p>として表示されてしまいます。 お手数で済みませんがどなたかお分かりになられる方がいましたらソースコードを教えていただけないでしょうか? またお時間がありましたら簡単でもちろん結構ですのでソースコードのご説明をいただけたら幸いです。 どうぞよろしくお願いいたします。 from sasalo

  • javascriptについて教えてください。

    divのボタンを作りたいと思い、調べながらjQueryを使う方法は以下のようにしたらいい事は分かったのですが、jQueryを使わずにしようと思い $(function(){ $("div").click(function(){ var x = this.id; alert(x); }); }); の部分を document.getElementsByTagName("div").onclick = function(){ var x = this.id;  alert(x); }; としてみたのですが、うまくいきません。jQueryを使わずに同じようなボタンを作るにはどうしたらいいのでしょうか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.4.min.js"></script> <script type="text/javascript" language="javascript"> $(function(){ $("div").click(function(){ var x = this.id; alert(x); }); }); </script> </head> <body> <div id="aaa" class="div_link">a</div> <div id="bbb" class="div_link">b</div> <div id="ccc" class="div_link">c</div> <div id="ddd" class="div_link">d</div> <div id="eee" class="div_link">e</div> </body> </html>

  • 外部css定義したclassをhtmlで引き継ぎ別名で定義する方法

    いつもお世話になります。 外部cssで、例えば xyz.css div.abc{ font-size:13px; width:100px; height:120px; border:solid; border-width:2px; border-color:#460675; } などと定義し、 htmlで <link rel="stylesheet" href="xyz.css" type="text/css"> <style type="text/css"><!-- div.def{ ここで、class abc の内容の一部のみ変更、追加をしたいんですが、 その記載方法がわかりません。 } --></style> 次のようにしてもできますが、 <div class="abc" style="ここに記載" ・・・・ JavaScriptで、classを切り替えて使用したいので、 cssで定義したclassを基に新たなclassを新たな名前でそれぞれのページでできないものかと調べています。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • タグを切り替えるJavaScriptについて

    下記のurlを参考にして、タグを切り替えるJavaScriptを使いレイアウトをしています。 http://archiva.jp/web/javascript/tab-menu.html やりたいことは各内容をIDセレクタでくくりたいのです。 <div id="page1">  <h2>page1</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab">    <li><a href="#page1"><span>page1を選択中</span></a></li>    <li><a href="#page2"><span>page2</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> <div id="page2">  <h2>page2</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab2">    <li><a href="#page1"><span>page1</span></a></li>    <li><a href="#page2"><span>page2を選択中</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> ...page3 このようにやりたいのですが、JavaScriptがIDセレクタの"tab"にしか対応していないため、他のページにいくとクリックが効かなくなってしまいます。 idセレクタをclassセレクタに設定し直してもidセレクタにしか対応していないため効きません。 tag2とtab3に対応させるためにはどのようにすればいいでしょうか。 よろしくお願いします。

  • JAVASCRIPTで、ボタンを押したら 入力項目を追加できるようにしたい。

    FORMタグ内に下記のようなの入力項目があります。 JAVASCRIPTを使って、追加ボタンを押したときに、下記の部分を2個、3個と追加させたいと思っております。 (最初から複数個分の入寮力フォームを用意しておくと、見た目が良くないため、追加ボタンで随時追加するようにしたい) どのようなjavascriptを書けばよいか、ご教授願えませんでしょうか。 どうぞよろしくお願い致します。 <select> <option value=" " selected="selected">選んでください</option> <option value="テスト1">テスト1</option> <option value="テスト2">テスト2</option> <option value="テスト3">テスト3</option> </select> <br class="spacer"> </div> <div class="forms"> <label>テーブル1</label> <input type="text" name="textfield" id="textfield" /> <label>テーブル2</label> <input type="text" name="textfield" id="textfield" /> <label>テーブル3</label> <input type="text" name="textfield" id="textfield" class="short" /> <div class="btns"> <input type="button" value="送信" /> <input type="button" value="さらに入力項目を追加する" /> <input type="button" value="クリア" /> </div>

このQ&Aのポイント
  • 6月に出産予定の者です。4/30から産前休がスタートし、産前休を有給にして出産手当金ではなく通常通り給与支給予定でした。
  • しかし、育休前に有給を使うことも可能と知りました。手取りを増やすためには、産休→有給→育休のほうがいいのでしょうか?
  • 使える有給は30日分です。
回答を見る