selectAll不选择D3上的任何节点

时间:2018-09-21 10:53:54

标签: javascript css d3.js

我正在尝试使用d3 selectAll函数选择4个div,但是没有任何选择。此代码中的高度永远不变:

var popop = d3.select("#chart")
    .selectAll(".bar");

popop.style("height", "40px");
<!DOCTYPE html>
<html lang="en" >

<head>
    <meta charset="utf-8">
    <script src="../lib/d3.v3.min.js"></script>
    <script src="project1.js"></script>
    <style>
        .bar {
            float: left;
            width: 30px;
            margin-right: 20px;
            border-color: #F4F5F7;
            border: 1px solid #C5C5C5;
        }
        #chart {
            width: 100%;
            height: 300px;
        }
    </style>

</head>

<body>

    <div id="chart">
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
    </div>

</body>
</html>

select('#chart')单独使用时有效。当我在“代码检查器”中查看代码时,弹出窗口有一个元素。当我添加.selectAll(“。bar”)时,仅给出一个元素。

当我在浏览器中的Stack Overflow上运行此命令时,它与本地代码相同。只有四个小水平线。将鼠标悬停在其上方时,其高度为0。

当我在Stack Overflow上运行Aagam Jain的代码时,它起作用了!!!当我在本地复制Aagam的代码时,它不起作用。其中包括从网站下载d3.v3。

在Firefox和Chrome中尝试过并得到相同的结果。

2 个答案:

答案 0 :(得分:-1)

问题出在d3.v3中。下面的代码段对我有用。

d3.select('#chart').selectAll('.bar').style('height', '40px')
<!DOCTYPE html>
<html lang="en" >

<head>
    <meta charset="utf-8">
<script src="https://d3js.org/d3.v3.min.js"></script>
    <style>
        .bar {
            float: left;
            width: 30px;
            margin-right: 20px;
            border-color: #F4F5F7;
            border: 1px solid #C5C5C5;
        }
        #chart {
            width: 100%;
            height: 300px;
        }
    </style>

</head>

<body>

    <div id="chart">
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
        <div class="bar"></div>
    </div>

</body>
</html>

答案 1 :(得分:-1)

这是一个计时问题。如果像我在问题中comments中提到的那样推迟脚本(以便它们在所有内容加载后运行然后按顺序运行),则一切正常:

<script src="https://d3js.org/d3.v3.min.js" defer></script>
<script src="./project1.js" defer></script>