简单的D3演示不适用于改变的结构

Pab*_*blo 0 javascript d3.js

我正在关注官方教程.由于结构相当简陋,我决定做一个更清洁的结构:

<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
<head>
<title>D3</title>
<style>
    .chart div {
        font: 10px sans-serif;
        background-color: steelblue;
        text-align: right;
        padding: 3px;
        margin: 1px;
        color: white;
    }
</style>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>

    var data = [4, 8, 15, 16, 23, 42];

    var x = d3.scale.linear()
        .domain([0, d3.max(data)])
        .range([0, 420]);

    d3.select(".chart")
        .selectAll("div")
        .data(data)
    .enter().append("div")
        .style("width", function(d) { return d * 10 + "px"; })
        .text(function(d) { return d; });

</script>
</head>
<body>

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

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.这是我得到的错误:

d3.html:20 Uncaught TypeError: Cannot read property 'linear' of undefined
Run Code Online (Sandbox Code Playgroud)

我在D3 api中发现方法scale.linear现在使用scaleLinear调用.

输出错误消失了,但我仍然看不到任何东西,同时使用scale复制示例.线性旧方法有效.

我做错了什么?

Ger*_*ado 5

你的脚本在上面head,并且在div之前解析它并生成一个类"图表".

只要将您的所有脚本的结束body,之后你选择的div:

.chart div {
        font: 10px sans-serif;
        background-color: steelblue;
        text-align: right;
        padding: 3px;
        margin: 1px;
        color: white;
    }
Run Code Online (Sandbox Code Playgroud)
<body>
<script src="https://d3js.org/d3.v4.min.js"></script>
<div class="chart"></div>
<script>
  var data = [4, 8, 15, 16, 23, 42];

    var x = d3.scaleLinear()
        .domain([0, d3.max(data)])
        .range([0, 420]);

    d3.select(".chart")
        .selectAll("div")
        .data(data)
    .enter().append("div")
        .style("width", function(d) { return d * 10 + "px"; })
        .text(function(d) { return d; });
  </script>
</body>
Run Code Online (Sandbox Code Playgroud)

如果你想保留脚本head,无论出于何种原因,只需更改d3.select(".chart")d3.select("body"):

div {
        font: 10px sans-serif;
        background-color: steelblue;
        text-align: right;
        padding: 3px;
        margin: 1px;
        color: white;
    }
Run Code Online (Sandbox Code Playgroud)
<head>
<title>D3</title>
<style>
    .chart div {
        font: 10px sans-serif;
        background-color: steelblue;
        text-align: right;
        padding: 3px;
        margin: 1px;
        color: white;
    }
</style>
<script src="https://d3js.org/d3.v4.min.js"></script>
<script>

    var data = [4, 8, 15, 16, 23, 42];

    var x = d3.scaleLinear()
        .domain([0, d3.max(data)])
        .range([0, 420]);

    d3.select("body")
        .selectAll("div")
        .data(data)
    .enter().append("div")
        .style("width", function(d) { return d * 10 + "px"; })
        .text(function(d) { return d; });

</script>
</head>
<body>
</body>
Run Code Online (Sandbox Code Playgroud)