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";
}

我认为如果你调用你的 variabledivs或类似的东西表明它不是一个元素,那么避免这些错误会更容易。

于 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 回答