• ベストアンサー

子要素の取得

<h2 class="highlight"> <span>あああああああ</span> </h2> 今、上記のようなhtmlに対してjaascriptで指定をしているのですが、クラスhighlightの子要素であるspanへの適用について悩んでいます。 getElementByClassの代わりのようなものはできているのですが、ある程度柔軟なスクリプトにしたいと思っていて、childNodesは改行も含めてしまうようなのでちょっと都合が悪い部分が出ています。 確実に子要素を選択するようにするにはどうしたらよいでしょうか? 一応 <h2><a href="#">あああああ</a></h2> という感じに改行なし、子要素はspan以外の要素がくることも想定しています。

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

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

こんなんで <script> window.onload=function(){ var tags=document.getElementsByTagName("*"); for(var i=0;i<tags.length;i++){ if(tags[i].className=="highlight"){ var n=tags[i].firstChild; while(n){ if(n.tagName) break; n=n.nextSibling; } alert(n.innerHTML); } } } </script> <h2 class="highlight"> <span>あああああああ</span> <span>いいいいいいい</span> </h2>

otopion
質問者

お礼

最初に出てくる要素のみに適用できるあたり、すごく助かりました。 探すときにはwhileで回してif文で条件が合えばbreakで抜け出せばいいってことなんですね。初めて知りました・・・(自分が勉強不足なのですが) いろいろ応用ができそうです。 ありがとうございました。

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

その他の回答 (1)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

H2の子要素を検索して、 nodeName が SPAN かどうか判定する。 (nodeName が #text なら次を探す) nodeType が 1:ELEMENT_NODE かどうか判定する。 (nodeType が 3:TEXT_NODE なら次を探す) とかそういう事でしょうか。 http://www.doraneko.org/misc/dom10/19981001/level-one-core.html#ID-1950641247 例 var H2 = ~~~;//目的のH2の取得 for(var x=H2.firstChild;x;x=x.nextSibling){ if(x.nodeName == 'SPAN') { // spanの処理 } }

otopion
質問者

お礼

回答ありがとうございます。 最初は個別の要素というよりは、単に子要素という意味で質問したのですが、アンカーに対して個別のスタイルを適用するのに良いかも・・・と思い始めてきました。 javascriptに関してはなかなかまとまったところが見つけにくいので、リンク参考になります。 ありがとうございました。

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

関連するQ&A

  • jQueryでクリックされた要素のidを関数で取得

    以下のようなソースで、クリックされた要素のidをアラートで出したいとき、class: alphabetのa要素ををクリックすると、undefinedと出ます。 関数でthisを使うと呼び出し元のことを指さないので、クリックされた要素のidは出ないということなのですが、こういった場合、クリックされた要素のidを取得して、表示したい場合はどのようにすればよいか教えてください。 [htmlソース] <a class='alphabet' id='a' href='' onclick="return false;">A</a> <a class='alphabet' id='b' href='' onclick="return false;">B</a> <a class='alphabet' id='c' href='' onclick="return false;">C</a> <script src="jquery.min.js"></script> <script type="text/javascript"> $(function(){ $('.alphabet').click(function(){ function alertAlphabet(){ alert($(this).attr('id')); }; alertAlphabet(); }); }); </script>

  • 条件付きで要素を取得したい

    条件付きで要素を取得したい 次のようなHTMLで、divのclassが「b」内のh2の要素が「ccc」の場合のdivのクラスが「d」の要素を取得したいのです。 つまり下の例では、「111」と「333」を取得したいです。 queryにどのように記述すれば良いのでしょうか? $document =<<<EOF <div class=a>  <div class=b>   <h2 class=c>ccc</h2>   <div class=d>111</div>  </div>  <div class=b>   <h2 class=c>ccc[a]</h2>   <div class=d>222</div>  </div>  <div class=b>   <h2 class=c>ccc</h2>   <div class=d>333</div>  </div> </div> EOF; $xpath = new DOMXPath($document); $xpath->query('ここの記述が知りたい');

    • ベストアンサー
    • PHP
  • クラス名の振られた要素の文字列取得方法

    Javascriptで特定のクラス名の付けられた要素から、タグに挟まれた文字列を取得する方法を教えてください。 ある自動生成されるページに、以下のように決まったクラス名が振られる要素があります。 これらの要素から"AAA"や"BBB"の部分を取得するにはどうすればいいでしょうか? 教えてください。 <a href="hoge.html" class="fuga">AAA</a> <p class="piyo">BBB</p>

  • dom要素のhtml取得について-get()

    dom要素のhtml取得について-get()メソッドを使用するのがいいのか? don要素のhtmlを取得したいと考えていますが うまくいきません。 以下htmlです。 ------------------------------------------------- <div id="hoge"> <div class="day-number">16</div> <div class="kurasuhoge"><a href="http://hogeURL.com" class="anker">○</a></div> <div class="day-number">17</div> <div class="kurasuhoge"><a href="http://hogeURL2.com" class="anker">○</a></div> </div> ------------------------------------------------- この中のアンカータグを取得し配列に格納したいです。以下のように格納出来れば理想です。 var hairetsu = {16:'<a href="http://hogeURL.com" class="anker">○</a>',17:'<a href="http://hogeURL2.com" class="anker">○</a>']; まずはアンカータグを取得と思い以下を書きました。 ------------------------------------------------- var hensu = $("#hoge .anker").parent().get(); alert(hensu); ------------------------------------------------- 結果[object HTMLDivElement],[object HTMLDivElement] と表示されてしまいます。 今getメソッドを使用していますが 他にいいメソッドがあればアドバイスいただけたら嬉しいです。 まとめますと 「#hogeの中の.anker要素をもつhtmlソースを摘出し配列に格納したいです。」 修正方法をご教示いただければ幸いです。

  • Table内TDの子要素を移動させたいのですが・・

    初心者的な質問になるかもしれませんが、宜しくお願いします。 唐突ですが、こんなTable付きのHTMLがあります(ちょっと省略してます)。 <DIV>.....</DIV> ← (*) <Table> <TR> <TD>  ← (1) <SCRIPT ........</SCRIPT> <A HREF="">........</A> <LI> <DIV class ..... </DIV> <DIV class ..... </DIV> <DIV class ..... </DIV> <LI> </TD> <TD>  ← (2) <LI> <DIV class ..... </DIV> <DIV class ..... </DIV> <DIV class ..... </DIV> <LI> </TD> <TD>  ← (3) <LI> <DIV class ..... </DIV> <DIV class ..... </DIV> <DIV class ..... </DIV> <LI> </TD> </TABLE> (1)は複数の子要素があり、(2)と(3)はLI要素(ただし、その中に複数要素がある)です。 この(1)~(3)のTDの子要素部分だけを抽出し、(*)の DIVタグの真下に移動させるようなjquery文を作りたいのですが、 http://d.hatena.ne.jp/replication/20120113/1326382090 等の記事を参考に、 var cells, tblcell; // テーブルタグを探して、1番目のテーブルを取得する var rows = $("table")[0].rows; // 列を1つずつ取り出す $.each(rows, function(i) { cells = rows[i].cells; // 行を1つずつ取り出す $.each(cells, function() { // tdタグの値を書き換える tblcell = $(this).detach(); console.log(tblcell); // tdタグのスタイルシートを書き換える $('div').after(tblcell); }); }); このやり方だとrowの性質上、DIVの下へTD付きでそのまま来てしまいます。 そうではなく、TD直下のHTMLだけをそのままDIVの直下へつなげるように放り込みたいのですが、 中々うまいやり方がみつかりません・・・ なにか、よい方法はございませんでしょうか?

  • 複数の要素へ appendchild できません

    以下のような html があり、それぞれの画像リンクの後ろに <span>文章4</span>を追加したいのですが、できません。 元の html <ol> <li>文章1 <a href="a.jpg" ><img src="a_small.jpg" /></a></li> <li>文章2 <a href="b.jpg"><img src="b_small.jpg" /></a></li> </ol> <p>文章3 <a href="c.jpg"><img src="c_small.jpg" /></a></p> 作りたい html <ol> <li>文章1 <a href="a.jpg" ><img src="a_small.jpg" /></a><span>文章4</span></li> <li>文章2 <a href="b.jpg"><img src="b_small.jpg" /></a><span>文章4</span></li> </ol> <p>文章3 <a href="c.jpg"><img src="c_small.jpg" /></a><span>文章4</span></p> 以下のようなスクリプトを書いてみたのですが、どうしても最後の要素(この場合は3番目の画像)へしか <span>文章4</span> が追加されません。全ての a タグの要素へ追加するにはどうしたらいいのでしょうか。 window.onload = function() { var addedSpan = document.createElement("span"); var addedTxt = document.createTextNode("文章4"); addedSpan.appendChild(addedTxt); var imgs = document.getElementsByTagName ("a"); for (var i=0; i<imgs.length; i++) { imgs[i].appendChild (addedSpan); } } 初歩的な質問でお恥ずかしいのですが、是非ご教授ください。どうぞよろしくお願いします。

  • jqueryで要素の獲得方法

    jqueryについてお聞きしたします。 下記のようなソースで <div class="sideBox"> <div class="sideBoxHead"> ・・・ </div> <div class="sideBoxInner basename"> <ul><li class="on"><span title="main title">aaa</span></li> <li><a href="html1" title="title1">bbb</a></li> <li><a href="html2" title="title2">bbb</a></li> : : <li class="last"><a href="htmlX" title="titleX">zzz</a></li> </ul></div> </div> "title2"をクリックした時の"html2"を獲得したいのですが $("div.sideBox > div > ul > li > a").click(function(){ var value = this.href; console.log("varlue = " + value); }); としても値が獲得できません。 直接"sideBoxInner basename"classからたどれば上手くいくような気がするのですが クラス名に半角スペースがある場合、どのようにすればいいのでしょうか?

  • jQueryスライドメニューの初歩的な質問です

    以下のスライドメニューは、それぞれブロック要素で構成されていて、リンク文字や余白をクリックするとスライドトグルで開閉が行われます(htmlファイルにコピーすれば動作すると思います)。 ひとまずイメージ通りに完成したのですが、1つ困ったことがあります。それはリンク文字をクリックしたときにトグルが実行されてしまうことです。ページ遷移する間にメニューが一度開閉してしまうので見た目にあまりスマートではありません。 それを修正するためいろいろ試行錯誤したのですが、どうやってもわからなかったので質問いたしました。リンク文字をクリックしたときは、ページ遷移のみでトグルを実行しないようにするにはどのように書けばよいのでしょうか? また、このソースはjQueryを1.7.2以上にすると動作しなくなってしまいます。この原因が分かる方がいらしたらぜひお教えください。 どうぞよろしくお願いいたします。 <!----------------------------------> <script type='text/javascript' src='http://www.google.com/jsapi'></script> <script type='text/javascript'>google.load('jquery', '1.7.1')</script> <script type='text/javascript'> <!-- $(function(){ $('span.tree_a').click(function() { $(this).next().slideToggle(); }).next().hide(); }); //--> </script> <!----------------------------------> <style type="text/css"> span.tree_a{ width: 100%; display: block; } </style> <!----------------------------------> <ul> <li><span class='tree_a'><a href='http://www.google.co.jp/'>親メニュー1</a></span> <ul> <li><span class='tree_a'><a href='http://www.google.co.jp/'>子メニュー1</a></span> <ul> <li><a href='http://www.google.co.jp/'>孫メニュー1</a></li> </ul> </li> </ul> </li> <li><span class='tree_a'><a href='http://www.google.co.jp/'>親メニュー2</a></span> <ul> <li><span class='tree_a'><a href='http://www.google.co.jp/'>子メニュー2</a></span> <ul> <li><a href='http://www.google.co.jp/'>孫メニュー2</a></li> </ul> </li> </ul> </li> </ul> <!---------------------------------->

  • jQueryでloadした要素の操作ができない

    loadにて特定のIDを読み込みした後、そのID内の要素にクラスを追加したりdiv要素を追加したりしようとしていますが、読み込んだり読み込まなかったりで困っています。 firebug、chromeは問題なし、iPhone、xperiaで読み込んだIDにaddClass, wrapが適用できません。 ページをリロードすると適用されるので、読み込みの順番かと思いますが、、、 $(window).loadもダメでした。 <div id="loading01"></div> <script type="text/javascript"> $("#loading01").load("../index.html #hogehoge"); </script> <script type="text/javascript"> $("#hogehoge").ready(function() { $('#loading01 li')addClass('css01'); $('#loading01 a').wrap('<div class="css02"><div class="css03">') }); </script> 数時間困り果てています。。。よろしくお願いします。

  • vertical-alignしたのに中央配置しない

    お世話になります。 Webデザインで基本的なことかもしれませんが、ご教授ください。 サイトのレフトメニュー欄にページ内アンカーリンクボタンを設置しています。 分からないのはspan.title02で指定したテキストが親要素であるspan.leftmenu_titleでbackground-imageで表示している画像の真ん中にきちんと表示されないことです。 一応インライン要素に指定しvertical-align:middle;指定しているのですが、これはどうしてでしょう。 画像の上部(top)に表示されどうしてもアンバランスに見えてしまいます。 どうかご教授ください。 HTML---- <div id="leftmenu"> <h2><a href="#concept"><span class="leftmenu_title"><span class="title02">コンセプト</span></span></a></h2> <h2><a href="#walls"><span class="leftmenu_title"><span class="title02">業務案内</span></span></a></h2> <h2><a href="#shisetsu"><span class="leftmenu_title"><span class="title02">施設紹介</span></span></a></h2> <h2><a href="#access"><span class="leftmenu_title"><span class="title02">アクセス</span></span></a></h2> </div> CSS---- .leftmenu_title { display:block; font-family:"MS Pゴシック", "ヒラギノ角ゴ Pro W3", sans-serif; background-image:url(../images/leftmenu_title.jpg); width:190px; height:20px; text-align:right; padding:0 10px 0 0; margin:10px 0; } .leftmenu_title:hover { background-image:url(../images/leftmenu_title_on.jpg); } .title02 { display:inline; font-size:small; color:#FFFFFF; vertical-align:middle; }

    • 締切済み
    • CSS