2010-12-28 3 views
2

私はこれが本当にうまくいったjsの問題を抱えています。要約でgetElementsByTagNameはトップレベルタグのみを取得しますか?

、私はpタグは、すぐに私はすべて、のdivラッパーを削除するようdiv

このような
<div id="main"> 
<p>see</p> 
</div> 

内にあるが、場合、私は(document.getElementsByTagName("p"))[0]

を使用している場合が見つからない要素を取得物事が働く。

30分後、私はこの単純なコードに問題を低減しました:ファイルに上記の入れ

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="content-type" content="text/html; charset=utf-8"> 
<title>ttttttttttttttttttttt</title> 
</head> 
<body> 

<div id="main"> 
<p>see</p> 
</div> 

<script type="text/javascript"> 
var myobj = document.createElement("div"); 
myobj.innerHTML='yesyes'; 

document.body.insertBefore(myobj, (document.getElementsByTagName("p"))[0]); 
</script> 

</body> 
</html> 

。 FirefoxまたはChromeまたはIE8で開きます。成功した場合は、「はい」と表示されます。 <div id="main">ラッパーを削除すると動作します。

何か私は理解していないようです。getElementsByTagName ??

答えて

5

getElementsByTagNameとは関係ありません。insertBeforeとは関係ありません。試してみてください:

document.getElementById('main').insertBefore(myobj, (document.getElementsByTagName("p"))[0]);​​ 

insertBeforeには親要素が必要です。あなたがそれを呼び出す方法(body)では機能しませんので、代わりに "main" divを参照してください。

+0

+1具体的に代わりに使用するには、問題は 'refChild'は彼が' insertBefore'を呼び出しているれている要素では見られないということです。 –

+2

もう一つの可能​​性は 'var p = document.getElementsByTagName(" p ")[0]です。 p.parent.parentNode.insertBefore(myObj、p); ' –

+0

"メイン "IDに依存しないように見えるので、私はFelixのバージョンを使用します。 –

0

あなたが.insertBeforeの親要素ではなく、document.bodyを指定する必要が体

document.body.appendChild(myobj); 
+0

いいえ、それは彼が 'insertBefore'でやろうとしていることです。 –

1

に挿入する前に、子このmyobjを追加する必要があります。

<div id="main"><p>see</p></div> 

<script type="text/javascript"> 
var myobj = document.createElement("div"); 
myobj.innerHTML='yesyes'; 

document.getElementById('main').insertBefore(myobj, document.getElementsByTagName("p")[0]); 
</script> 
3

あなたの問題はないdocument.getElementsByTagNameで、document.body.insertBeforeである - あなたは、スクリプトの先頭に行

alert(document.getElementsByTagName("p")[0].innerHTML); 

を貼り付けることによって自分自身のためにこれを見ることができます。

だから、insertBeforeはどうなっていますか?そのリンクで見ることができるように、すべて DOMノードです。そのノードの直接子のうちの1つの前に要素(または "ドキュメントフラグメント")を挿入します。<div id="main>がある場合、getElementsByTagName<p><body>の直系子ではありませんので、body.insertBeforeはあなたが望むことはできません。

は、あなたが望む効果を得る

var first_p = document.getElementsByTagName("p")[0]; 
first_p.parentNode.insertBefore(myobj, first_p); 
+0

+1。 –

関連する問題