D3.js 我对d3 enter()和exit()选择有什么误解?

D3.js 我对d3 enter()和exit()选择有什么误解?,d3.js,D3.js,我在学D3。在本例中,我使用一个简单的数字列表作为数据添加段落。我尝试做以下几件事: 从5个元素的列表开始。当我调用update()时,我认为enter选项应该包含5个段落,exit()选项应该为空 在数据中添加一个数字。输入选项应包含此单个段落,退出选项应为空 删除除两个以外的所有数字。此处,退出选择应包含4个段落,输入选择应为空 然而,这不是我所看到的!我让update函数打印元素的数量,如下所示: console.log('paras: '+paras[0].length+ ' enter

我在学D3。在本例中,我使用一个简单的数字列表作为数据添加段落。我尝试做以下几件事:

  • 从5个元素的列表开始。当我调用update()时,我认为enter选项应该包含5个段落,exit()选项应该为空
  • 在数据中添加一个数字。输入选项应包含此单个段落,退出选项应为空
  • 删除除两个以外的所有数字。此处,退出选择应包含4个段落,输入选择应为空
  • 然而,这不是我所看到的!我让update函数打印元素的数量,如下所示:

    console.log('paras: '+paras[0].length+ ' enter: '+parasE[0].length + ' exit: '+paras.exit()[0].length);
    
    对于调用的三次,我得到以下输出:

    "paras: 5 enter: 5 exit: 5" 
    "paras: 6 enter: 6 exit: 6"
    "paras: 6 enter: 6 exit: 6"
    
    据我所知,当我使用索引进行数据连接(而不是键)时,退出选择或输入选择总是空的。是我误解了这一点,还是我使用了错误的方法来检查选择中有多少元素

    似乎每次都会删除并重新添加所有元素(这就是为什么enter和exit选项都已满)。我误解了什么

    谢谢, 路易丝

    完整示例代码(将从本地HTML文件运行):

    
    D3你好世界
    d3.选择(“正文”)。追加(“范围”)
    .text(“你好,世界!”);
    数据1=[1,2,3,4,5];
    函数更新(){
    第3段。选择('body')。选择全部('p')。数据(data1);
    parasE=第段输入();
    console.log('paras:'+paras[0].length+'enter:'+parasE[0].length+'exit:'+paras.exit()[0].length);
    params.enter().append('p').html(函数(d){return d});
    段落退出().删除();
    }
    更新();
    数据1.推送(10);
    更新();
    数据1=[1,2];
    更新();
    
    原因是D3选择不完全是数组,不应该这样对待。特别是(来自):

    一个细微差别是选择是分组的:每个选择不是一维数组,而是元素数组的数组

    您只是得到了错误选择数组的大小。用于获取所选内容的大小:

    console.log('paras: '+paras.size()+ ' enter: '+parasE.size() + ' exit: '+paras.exit().size());
    

    完整的示例。

    原因是D3选择不完全是数组,不应该这样对待。特别是(来自):

    一个细微差别是选择是分组的:每个选择不是一维数组,而是元素数组的数组

    您只是得到了错误选择数组的大小。用于获取所选内容的大小:

    console.log('paras: '+paras.size()+ ' enter: '+parasE.size() + ' exit: '+paras.exit().size());
    

    完整的示例。

    原因是D3选择不完全是数组,不应该这样对待。特别是(来自):

    一个细微差别是选择是分组的:每个选择不是一维数组,而是元素数组的数组

    您只是得到了错误选择数组的大小。用于获取所选内容的大小:

    console.log('paras: '+paras.size()+ ' enter: '+parasE.size() + ' exit: '+paras.exit().size());
    

    完整的示例。

    原因是D3选择不完全是数组,不应该这样对待。特别是(来自):

    一个细微差别是选择是分组的:每个选择不是一维数组,而是元素数组的数组

    您只是得到了错误选择数组的大小。用于获取所选内容的大小:

    console.log('paras: '+paras.size()+ ' enter: '+parasE.size() + ' exit: '+paras.exit().size());
    

    完整示例。

    谢谢!我终于明白了:)我确实尝试过使用大小,但我使用的是d3的旧版本,它还不存在。谢谢!我终于明白了:)我确实尝试过使用大小,但我使用的是d3的旧版本,它还不存在。谢谢!我终于明白了:)我确实尝试过使用大小,但我使用的是d3的旧版本,它还不存在。谢谢!我终于明白了:)我确实尝试过使用大小,但我使用的是d3的旧版本,它还不存在。