• ベストアンサー

Aタグのhrefの値を取得したいのですが (DOM)

こんばんわ。 早速質問をお願いします。 下のようなhtml文があります。 //------------------------------------------------ <span id = 'ID'><IFRAME FRAMEBORDER='0' MARGINHEIGHT='0' MARGINWIDTH='0' SCROLLING='NO' HEIGHT='60' WIDTH='120' SRC='address'> <table border='0' height='60' width='120'><tr><td align='center' valign='middle'><a href='address' target='_blank'>リンクテキスト<img src='address' width='1' height='1' border='0' alt='' /></a></td></tr></table> </IFRAME></span> //------------------------------------------------ <span>~</span>の間にある、aタグの [href='address']の値を取得 したいのですが上手く行きません。 var nodes = document.getElementById("ID"); var links = nodes.getElementsByTagName("a"); で<span>~</span>内のAタグリストにして、そこから var href = links[0].getAttribute("href"); で取れるかなと思ったのですが、どうもgetElementsの部分からして 違うらしくて。 要素の子を頭から順にたどって行けば、一応値は取れると思いますが、 階層の深さ常にが一定とは限らない為、それはしたくありません。 こういった場合、どうするのが一般的なのでしょうか? 宜しければアドバイスをお願い致します。

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

  • ベストアンサー
  • nobuoka
  • ベストアンサー率69% (23/33)
回答No.1

iframe 要素を使っていなければ maru_n さんの JavaScript コードで期待通りの動作をするはずです。 今回の例の場合、iframe 要素を使っているというところにちょっと問題があります。 iframe 要素の中身は 「iframe 要素をサポートしていない UA において表示され」 ます。 逆に言うと、iframe 要素をサポートしている UA では iframe 要素の中身は全くレンダリングされないということになります。 そのため、iframe 要素をサポートしている UA では、ID = "ID" の span 要素の子孫は iframe 要素のみになり、a 要素はないことになってしまいます。 ゆえに getElementsByTagName メソッドで a 要素を取得しようとしても取得できないのです。 以上が原因です。 そんなわけで解決は難しいと思うのですが、そもそも表示されもしない iframe 要素の子孫要素を取得する必要はあるのでしょうか? そこから設計を見直したほうがいいような気がします。

maru_n
質問者

お礼

なるほどなるほど。 iframeはそういった働きをするものなのですね。 正常にレンダリングされた後では、iframe内のタグは無いものに されてしまうと。 よく理解できました。ありがとうございます。

その他の回答 (1)

回答No.2

alert(document.getElementById('ID').innerHTML.match(/.+<?\shref=['|"](.*?)['|"].*/)[1]); ^^;

maru_n
質問者

お礼

innerHTML.match・・・こういうやり方があるもあるんですね。^^; 1の方のアドバイス後に、チャチャっと設計を改変してしまいました ので、試せしてはいないのですが、これは便利そうですので覚えておきます。ありがとうございました。