刚从D3开始,下面的HTML应该按阵列显示垂直条(5条),但是只显示3条。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
<style type="text/css">
div.bar {
display: inline-block;
width: 20px;
height: 75px;
background-color: teal;
}
</style>
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapse" data-toggle="collapse" data-target="#navbar"
aria-expanded="false" aria-controls="navbar">
<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" href="#">D3</a>
</div>
</div>
</nav>
<script type="text/javascript" src="js/d3.js"></script>
<script type="text/javascript">
var dataset = [5, 10, 15, 20, 25];
d3.select("body")
.selectAll("div")
.data(dataset)
.enter()
.append("div")
.attr("class", "bar");
</script>
</body>
</html>
但是,如果我<script>...</script>
之前移动nav
,则可以看到正确的柱数(5)。出于性能方面的考虑,我想保留原始订单并解决该问题。有任何想法吗?
在当前的实现中,当调用时selectAll("div")
,结果选择包含<div>
DOM中已经存在的两个元素(classcontainer
和class navbar-header
)。前两个数据值(5和10)与这两个<div>
元素相关联。其余三个数据值(15、20和25)是enter()
选择中的唯一值。
一个简单的解决方法是使用selectAll("div.bar")
替代方法,尽管您可能想重新阅读D3.js文档以更好地准确理解原始代码为什么出错。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句