0

body タグ/要素を使用しようとしても空のままである理由を知っていますか? 次のコードがあります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<title>Max</title>
<link rel="stylesheet" type="text/css" href="css/style.css"/>
<script>
alert(document.getElementsByTagName("*"));
function se(){
  var twenty = document.getElementsByTagName("*")[20];
 //twenty.children[1].children[0].children[1].innerHTML = "hiephoi";
}
se();

var fg = document.getElementsByTagName("body")[0];//undefined
</script>
</head>
<body>
<script>
alert(document.getElementsByTagName("*"));
function se(){
  var twenty = document.getElementsByTagName("*")[20];
  //twenty.children[1].children[0].children[1].innerHTML = "hiephoi";
}
se();</script>
:
:
:

これをデバッグすると、document.getElementsByTagName("*")ブレークポイントで要素のリストが表示されますが、コードを実行するとエラーが発生します

document.getElementsByTagName("*")[20].children[1].children[0].children[1].innerHTML = "hiephoi";

オブジェクトではないと言いますdocument.getElementsByTagName("*")[20].childrenが、実際には未定義です。なぜワイルドカードを使用するのか不思議に思うかもしれませんが、特定のタグを探しただけでは何も返されません。奇妙なことに、ワイルドカードはノードのリストを返します。JQueryで試すこともできますが、これを理解しようとしています。ドキュメントの読み込み段階と関係があるのではないかと思いますか? それとも、html のどこかに欠落したタグが含まれていて、JS が混乱している可能性がありますか?

4

1 に答える 1

1

DOM ツリーが作成される前に要素を取得しようとしています。JavaScript を最後の body タグの前に配置し、動作するかどうかを確認します (テストされていません。同じ理由で動作しない可能性があります)。

さらに良いwindow.onloadことに、DOM から読み取ろうとする前に、DOM がロードされていることを確認してください。window.onload と <body onload=""/> の比較

于 2012-09-30T14:16:29.243 に答える