document.getElementById无法正常工作?

时间:2016-01-31 09:12:29

标签: javascript

有人可以解释为什么这不起作用吗?

var element = document.getElementById('element'); // Works OK
var slide = element.getElementById('slide'); // Throws an error

所以我的想法是只获取一次DOM,并且我拥有该变量中的所有标签,然后我可以操作它并从该变量中获取其余部分。

如何从element变量中获取其他元素? 每次我需要来自DOM的东西时使用document.getElementById('id');是一件坏事吗?它会减慢网页速度吗?

我将如何解决这个问题?

请不要jQuery,纯Javascript!

由于

4 个答案:

答案 0 :(得分:3)

Element没有double currentProgress = totalBytesWritten / (double)totalBytesExpectedToWrite; NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.xxx.xxxx"]; [defaults setDouble:(currentProgress*100) forKey:@"Percent"]; [defaults synchronize]; [[NSNotificationCenter defaultCenter] postNotificationName:@"UpdateWidget" object:nil]; 方法,getElementById有,

所以使用

document

答案 1 :(得分:1)

你正试图通过它的id获取一个元素。所以如果它嵌套在元素内部或者它是一个父元素并不重要!因为DOM中只有一个元素可以具有相同的ID。

与获得您必须使用的第一个元素相同:

<html>
<head>
<!-- Latest compiled and minified CSS -->
 <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">

<!-- jQuery library -->
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>

  <!-- Latest compiled JavaScript -->
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js">     </script>
  </head>
  <body>

<nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation">
    <div class="container topnav">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand topnav" href="#">Start Bootstrap</a>
        </div>
     </div>
</nav>
   </body>
  </html>

而不是:

document.getElementById('slide');

因为元素变量没有方法getElementById。你从文档对象那里得到它。

答案 2 :(得分:0)

document.getElementById('element');将通过您的DOM获取具有特定ID的控件。因此,要获得身份slide的控件,您必须使用document对象

document.getElementById('slide');

答案 3 :(得分:0)

Element.prototype.getElementById = function(req) {
    var elem = this, children = elem.childNodes, i, len, id;

    for (i = 0, len = children.length; i < len; i++) {
        elem = children[i];

        //we only want real elements
        if (elem.nodeType !== 1 )
            continue;

        id = elem.id || elem.getAttribute('id');

        if (id === req) {
            return elem;
        }
        //recursion ftw
        //find the correct element (or nothing) within the child node
        id = elem.getElementById(req);

        if (id)
            return id;
    }
    //no match found, return null
    return null;
}

所以你可以使用这段代码

var element = document.getElementById('element'); // Works OK
var slide = element.getElementById('slide'); // Will work

From answer for another question