理解update-enter-exit三个函数的用法

updateenterexit是D3比较重要的三个函数。
先上代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>理解update-enter-exit三个函数的用法</title>
</head>
<body>
    <p>Apple</p>
    <p>Pen</p>
    <p>AppelPen</p>

    <script src="http://d3js.org/d3.v3.js"></script>
    <script>
        // 选择集
        var body = d3.select("body");
        // 数据绑定
        var dataset = [30, 40, 50, 60, 70];

        var p = body.selectAll("p");

        var update = p.data(dataset); 

        var enter = update.enter(); 

        var exit = update.exit();

        console.log(update);

        console.log(enter);

        console.log(exit);

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

在HTML文档中定义了三个P元素,以便后面D3数据的绑定。再用D3选择所有的P元素,用的是selectAll()函数。
再使用data函数选择数据,选择的部分就是update。enter和exit都是update的部分。
update就是已经绑定了的元素部分。用console.log(update); 输出,我们可以看到三个p元素分别绑定了30,40,50三个数。所以我理解的update就是数据和元素共同绑定的部分。比如说你有你有5株多肉植物,我只有三个花盆,那我们现在可以种三盆植物,这三盆呢就是update部分啦。
这里写图片描述
我再看看console.log(enter); enter输出的是什么:
这里写图片描述
enter部分输出的就是update部分没有绑定的剩下的两个数据,因为这里它没有元素可以绑定,所以就是木有绑定的元素的内容。
就是我剩下的那两株没有盆的多肉。
exit输出的是当数据量比元素个数要小的时候,才会有内容,我们把刚刚的程序的数组长度变为2,var dataset = [30, 40];
这个时候我再来看看输出的是什么:
这里写图片描述
我们看到这里输出了一个多余的P元素,因为它没有数据绑定,所以出现在了这里。比如说你有你有3株多肉植物,我有5个花盆,那么两个多余的盆就会出现在exit
面。
这三个部分在很多程序中的处理方法都是有很多模式可寻的。
我们现在在把数据更改为5个。var dataset = [30, 40, 50, 60, 70];
我们把有数据绑定的部分的内容更改为数据的本身

var update = p.data(dataset)
            .text(function(d) {
                return d;
            }); 

它的输出就变成了数据本身
这里写图片描述
对于enter部分,有数据没有元素与之绑定,我们就要添加元素

var enter = update.enter()
                .append("p")
                .text(function(d) {
                    return d;
                });

我们看到输出了所有data数据,可是我们明明只有三个P元素啊,那剩下两个数据是怎么出来的呢:
这里写图片描述
我们在打开调试模式检查一下网页的元素,我们看到下面添加了两个p段落,这两个段落就是通过enter添加的。
这里写图片描述

对于数据量比较少的时候,多余的元素通常是没有用的,所以他的处理手法是remove() ,

var exit = update.exit()
                        .remove();

我们再把数据改成两个
现在再刷新页面就只有两个P段落了
这里写图片描述

到这里大概就滤清这三个函数的用法了。
最后贴上完整的代码。看一遍没用,试一下才知道!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>理解update-enter-exit三个函数的用法</title>
</head>
<body>
    <p>Apple</p>
    <p>Pen</p>
    <p>AppelPen</p>

    <script src="http://d3js.org/d3.v3.js"></script>
    <script>
        // 选择集
        var body = d3.select("body");
        // 数据绑定
        var dataset = [30, 40, 50, 60, 70]; //根据需要选择数据的长短
        // var dataset = [30, 40];

        var p = body.selectAll("p");

        var update = p.data(dataset)
                        .text(function(d) {
                            return d;
                        }); 

        var enter = update.enter()
                        .append("p")
                        .text(function(d) {
                            return d;
                        }); 

        var exit = update.exit()
                        .remove();

        console.log(update);

        console.log(enter);

        console.log(exit);

    </script>
</body>
</html>
好的,我会尽可能清晰地回答你的问题。首先,我们先来了解一下D3.js的enter-update-exit模型。 在D3.js中,数据驱动是一种重要的思想,它能够让你更加高效地创建和更新可视化图表。enter-update-exit模型是D3.js中常用的数据驱动模型,它有三个部分: 1. enter部分:表示需要添加的新元素,这些元素是数据集中存在但是DOM中不存在的元素。 2. update部分:表示需要更新的已有元素,这些元素既存在于数据集中也存在于DOM中。 3. exit部分:表示需要删除的已有元素,这些元素存在于DOM中但是不存在于数据集中。 那么,如何使用enter-update-exit模型展示n个p标签,绑定m个数据的数据集呢?下面是一个示例代码: ```javascript // 假设我们有一个包含m个数据的数据集data var data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // 选择所有p标签 var p = d3.selectAll("p"); // 绑定数据 var update = p.data(data); // 处理update部分 update.text(function(d) { return d; }); // 处理enter部分 update.enter() .append("p") .text(function(d) { return d; }); // 处理exit部分 update.exit().remove(); ``` 解释一下上面的代码: 1. 首先,我们定义了一个包含10个数字的数据集data。 2. 然后,我们使用d3.selectAll()方法选择所有p标签,并使用data()方法将数据集绑定到选择集上,这时候update部分就包含了所有已经存在的p标签,并且与数据集中的数据进行了绑定。 3. 接着,我们使用text()方法来更新update部分中的p标签的文本内容,这里使用了一个函数来返回每个数据值,从而实现了将数据集中的数据更新到p标签中。 4. 然后,我们使用enter()方法来处理enter部分,也就是需要添加的新元素。这里我们选择了p标签,并使用append()方法来添加新的p标签,然后同样使用text()方法来更新文本内容,这里的函数也是返回每个数据值。 5. 最后,我们使用exit()方法来处理exit部分,也就是需要删除的已有元素。这里我们只需要调用remove()方法将这些已有的p标签从DOM中删除即可。 通过这样的方式,我们就可以使用enter-update-exit模型来展示n个p标签,绑定m个数据的数据集,并且能够充分利用D3.js的数据驱动思想,实现高效的可视化效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值