关于D3.js的数据引入 data() enter() exit()

关于D3.js的数据引入 data() enter() exit()以及key Function 的说明

<div id='stack'>
  <div>**First div**</div>
  <div>**Second div**</div>
</div>
let arr1 = let data = [
      { name: 'aa', id: 'a' },
      { name: 'bb', id: 'b' },
      { name: 'cc', id: 'c' },
      { name: 'dd', id: 'd' },
      { name: 'ee', id: 'e' },
      { name: 'ff', id: 'f' },
    ];
    let u = d3.select('#stack')
      .selectAll('div')
      .data(arr1)
    // no key function,此时默认index匹配连接,即第一条数据与第一个dom绑定,数据绑定在
    //对应dom的_data_属性上
    //例如:第一个div的属性有一个_data_:{ name: 'aa', id: 'a' }
    //此时因为只存在两个dom节点,故数据只匹配到前两个
      .enter()
    //这一步多余的4条数据会进入enter()函数
      .append('div')
    //多余的四条数据继续绑定新加入的dom,进行数据绑定
      .html(function(d) { return d });
    console.log(u);
    
let arr2 = [
      { name: 'aaa', id: 'a' },
      { name: 'bbb', id: 'b' },
      { name: 'ccc', id: 'c' },
      { name: 'ddd', id: 'd' },
      { name: 'eee', id: 'e' },
      { name: 'fff', id: 'f' },
    ];
    let u = d3.select('#stack')
      .selectAll('div')
    //此时因为上面的操作,已存在6个div的dom,且已经绑定了上述arr1 的数据
    ///例如:第一个div的属性有一个_data_:{ name: 'aa', id: 'a' }
      .data(arr2, function(d, i) { return d.id })  
    // key function used
    //此时接入数据后,匹配的原则是按照每条数据的id来匹配(d.id),这时的6条数据会去
    //d3选中的6个dom元素的_data_绑定的数据中找每一个item的id是否可以匹配,
    //如果匹配成功,则替换成新的数据绑定到相应dom的_data_属性上
    //如果数据没有匹配上dom,即有多余的数据未使用完,则这部分数据进入enter()函数中
    //如果有多余的dom没有匹配上数据,则这部分dom进入exit()函数中
      .style('color', 'red')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值