2012-02-20 6 views
6

は、だから私はこれを行います。次に、私はこれをしたい:getElementsByTagName( 'a');働いていない?</p> <pre><code>var stuff = document.getElementsByTagName('iframe'); </code></pre> <p>作品罰金:

var other = stuff.getElementsByTagName('a'); 

しかし、それは動作しません。それは未定義に終わる。私はできる:

var other = document.getElementsByTagName('a'); 

それはいいです。私は 'iframe'のすべての 'a'を得ることができないはずですか?

編集:私はiframeを所有していないので、何かにアクセスできないという印象を受けています。

+0

iframeを所有していますか? – Anurag

+0

@Anuragいいえ誰かがブラウザのセキュリティのためにその情報にアクセスできないと答えたが、誰かがそれを削除したことを知りました。私はあなたが実際のiframeの部分にしかアクセスすることができないと思います。 – townie

答えて

2

getElementsByTagNameは、一致する要素の配列を返します。個々のIFRAMEにアクセスするには、たとえばstuff[0]を使用します。

10

使用..

var iframe = document.getElementsByTagName('iframe')[0], 
    iframeDoc = iframe.contentWindow.document; 

Specification

getElementsByTagName('a')iframeDocに電話することができます。また、iframeDoc.linksにアクセスすることもできますが、それは全く同じではありませんが、あなたが望むものかもしれません。

もちろん、これはすべてSame Origin Policyに違反していないiframedocumentへのアクセスに依存しています。

+1

これは正しいです。 getElementsByTagNameは、ドキュメント上のメソッドであり、リンク上のメソッドではありません。あなたがそれをやろうとしている方法で、あなた(町)がタグの子を並べ替えることを試みている。 – Chris

+3

'iframe.contentDocument'がIE <8で動作しないと仮定すると、ブラウザ間で確実に動作する' iframe.contentWindow.document'のみを使用します。最初にcontentDocumentを使用しようとしても利点はありません。コードだけが長くなります。 –

+1

@ ReneSaarsooええ、おそらく2番目はIEのビジネスを行う適切な方法だと考えられましたが、その仕様には両方の記述があります。私はそれを修正します:) – alex

4

getElementsByTagName()は、反復処理が必要なNodeListを返します。それを反復するために、あなたが行うことができます:

for (var i = 0; i < stuff.length; i++) { 
    var other = stuff[i].getElementsByTagName('a'); 
} 

しかし、getElementsByTagName('a')は、ほぼ確実にあなたが望んでいないもので、現在の文書、内部の子供たちのために要求します。あなたは、フレーム内のドキュメント内の子供をしたい場合、あなたは何をする必要があります:あなたはとIEの古いバージョンでは、複数のiframeを使用している場合

for (var i = 0; i < stuff.length; i++) { 
    var other = stuff[i].contentWindow.document.getElementsByTagName('a'); 
} 

これは動作します。

+4

実際には配列ではありません。これはノードリストです。 –

+0

@MikeSamuelかなり右:) –

3

は、0番目のiframeのすべてのリンクを含む配列のようなオブジェクトを生成する必要があります。

には現在のドキュメントにノードが含まれていないため、contentWindow.documentを使用する必要があります。contentWindowプロパティが独自のドキュメントを持つ別のウィンドウを指し示すフレームです。

0

の代わりにcontentWindow.documentとお勧めするのはなぜですか?

もちろん、どちらも動作しますが、私が意味するものを使用することを好みます。窓が欲しいなら、私はcontentWindowを使います。文書が必要な場合はcontentDocumentを使用します。

+0

明らかにそれは動作しません alex

関連する問題

 関連する問題