みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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の部分からして
違うらしくて。
要素の子を頭から順にたどって行けば、一応値は取れると思いますが、
階層の深さ常にが一定とは限らない為、それはしたくありません。

こういった場合、どうするのが一般的なのでしょうか?
宜しければアドバイスをお願い致します。

投稿日時 - 2009-08-25 01:30:59

QNo.5234462

困ってます

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

iframe 要素を使っていなければ maru_n さんの JavaScript コードで期待通りの動作をするはずです。

今回の例の場合、iframe 要素を使っているというところにちょっと問題があります。 iframe 要素の中身は 「iframe 要素をサポートしていない UA において表示され」 ます。 逆に言うと、iframe 要素をサポートしている UA では iframe 要素の中身は全くレンダリングされないということになります。
そのため、iframe 要素をサポートしている UA では、ID = "ID" の span 要素の子孫は iframe 要素のみになり、a 要素はないことになってしまいます。 ゆえに getElementsByTagName メソッドで a 要素を取得しようとしても取得できないのです。

以上が原因です。
そんなわけで解決は難しいと思うのですが、そもそも表示されもしない iframe 要素の子孫要素を取得する必要はあるのでしょうか? そこから設計を見直したほうがいいような気がします。

投稿日時 - 2009-08-25 03:05:19

お礼

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

よく理解できました。ありがとうございます。

投稿日時 - 2009-08-25 15:45:09

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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

^^;

投稿日時 - 2009-08-25 07:24:32

お礼

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

投稿日時 - 2009-08-25 15:50:11

あなたにオススメの質問