D3js中each与call使用区别

D3js中each与call使用区别

2019-01-10 14:31:35 骤逝 阅读数 504更多

在对选集中的对象进行操作的时候,each和call都可以使用,通过如下代码具体分析他们使用的区别:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../d3.min.js"></script>
    <style type="text/css">
        .red {
            background-color: red;
        }

        .box {
            height: 100px;
             100px;
        }

        .blue {
            background-color: blue;
        }
    </style>
</head>
<body>
<span id="eachSelect">
        <div></div>
        <div></div>
        <div></div>
        </span>

<span id="callSelect">
        <div></div>
        <div></div>
        <div></div>
        </span>

<script type="text/javascript">

    // 1-code
    d3.select("#eachSelect").selectAll("div")
        .attr("class", "red box")
        .each(function (d, i) {
            d3.select(this).append("h1").text(i);
        });

    // 2-code
    d3.select("#callSelect").selectAll("div")
        .attr("class", "blue box")
        .call(function (d, i) {
            d.append("h1").text(i);
            //this.append("h1").text(i);
        }, "1");

    // 3-code

    // d3.select("#callSelect").selectAll("div")
    //     .attr("class", "blue box")
    //     .call(function (d) {
    //         d.each(function (d, i) {
    //             d3.select(this).append("h1").text(i);
    //         });
    //     });


</script>
</body>
</html>

1.code中使用的each,可以看出来他的作用是对选集中的对象进行遍历操作,其中参数d为undefined,参数i为遍历元素的下标,this表示当前操作的对象;
2.code中使用的call,可以看出来其中的d参数就是选集中的对象与this一样,d之后的参数由用户自定义传递;
如果您使用了call也可以变通的实现each的操作过程,例如3-code的例子。

原文地址:https://www.cnblogs.com/grj001/p/12223679.html