有人可以解释为什么这不起作用吗?
var element = document.getElementById('element'); // Works OK
var slide = element.getElementById('slide'); // Throws an error
所以我的想法是只获取一次DOM,并且我拥有该变量中的所有标签,然后我可以操作它并从该变量中获取其余部分。
如何从element
变量中获取其他元素?
每次我需要来自DOM的东西时使用document.getElementById('id');
是一件坏事吗?它会减慢网页速度吗?
我将如何解决这个问题?
请不要jQuery,纯Javascript!
由于
答案 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