1

オブジェクトタイプの使用法を理解し、document自分自身に挑戦しようとしています。すべてのdivタグを非表示にしようとしています。関数を実行するとエラーが返されますが、Uncaught TypeError: Cannot set property 'display' of undefined正確に何を意味するのかわかりません。未定義とは何ですか?

コードの出力はhttp://jsfiddle.net/Bdbtq/にあります。

コード

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta http-equiv="content-language" content="en-us" />
    <meta http-equiv="cache-control" content="no-cache" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta name="keywords" content="" />
    <meta name="description" content="" />
    <meta name="author" content="" />
    <meta name="copyright" content="&copy; 2012" />
    <meta name="robot" content="noindex, nofollow" />

    <title>js features</title>

    <base href="" />

    <link rel="stylesheet" type="text/css" media="all" href="" />

    <style type="text/css" media="all">

    </style>
</head>
<body>
    <div id="container">
        <div id="header"></div>
        <div id="content">
            <p>This is sample content</p>
        </div>
        <div id="footer">&copy; 2012</div>
    </div>

    <script type="text/javascript">

    function hideMe() {
        //hide all div elements
        var div = document.getElementsByTagName("div");

        for(var i = 0; i < div.length; i = i + 1) {
            div.style.display="none";
        }
    }

    </script>
    <p onClick="hideMe();">Click to hide</p>
</body>
</html>
4

3 に答える 3

4

getElementsByTagName配列を返します。だからあなたは必要です:

    var divs = document.getElementsByTagName("div");

    for(var i = 0; i < divs.length; i = i + 1) {
        divs[i].style.display="none";
    }
于 2012-07-12T01:48:49.437 に答える
3

Divは要素の配列であり、単一の要素ではありません。これを試して:

for(var i = 0; i < div.length; i = i + 1) {
    div[i].style.display="none";
}

divs変数、またはそれが要素ではないことを示す類似のものを呼び出すと、これらの間違いを回避する方が簡単だと思います。

于 2012-07-12T01:48:31.613 に答える
1

divこの時点で、変数はノードリストをgetElementsByTagName()返すため、単一の変数ではなくノードリストになります。次のように、ループから配列インデックスを介してアクセスする必要があります。div[i]

for(var i = 0; i < div.length; i = i + 1) {
    // div[i] holds the current loop iteration
    div[i].style.display="none";
}
于 2012-07-12T01:48:17.277 に答える