d3选择集合核心方法(二):data与datum

表一 d3赋值语句data与datum的区别

特性datumdata
集合运算不支持支持enter、exit函数
唯一性识别不支持不支持
旧数据清除支持不支持
读取数据返回集合的第一条数据返回集合的所有数据
赋值将集合的每个元素设置为同样的值集合更新运算,两个集合的交集运算
链式操作后值总是覆盖前值不断进行集合的交集运算
对空元素赋值后续操作无效果可通过enter添加新元素

实例代码:

假定预置的DOM元素如下:

<li class="list-group-item" id="1"></li>
<li class="list-group-item" id="2"></li>
<li class="list-group-item" id="3"></li>

1. 集合运算

//  进行交集运算, update.data()运算结果为[1, 2, 3]
var update = d3.selectAll('.list-group-item').data([1, 2, 3])
//  进行赋值运算,所有的.list-group-item元素的数据都为[1, 2, 3]
var items = d3.selectAll('.list-group-item').data([1, 2, 3])

2. 唯一性识别

//  可添加主键的唯一性识别,排除重复元素, update.data()运算结果为[1, 2, 3]
var update = d3.selectAll('.list-group-item').data([1, 2, 3], function(d) {
    return d !== undefined?d : this.id;
})

3. 清除旧数据

//  无效,始终会进行集合运算,并且参数只接受数组类型
var update = d3.select('#list-group-item').data({id : '1', name : "item"})  
//  有效,会将#list-group-item的数据更新为{id : '1', name : "item"}
var update = d3.select('#list-group-item').datum({id : '1', name : "item"}) 

4. 读取数据

//  返回所有.list-group-item元素的数据,类型必定是数组,本例中为[1, 2, 3]
var values = d3.selectAll('.list-group-item').data()    
//  返回的总是第一个.list-group-item元素的数据,依赖于设定的值,本例中返回1
var value = d3.selectAll('.list-group-item').datum()

5. 赋值

参见清除旧数据与唯一性识别。

5. 链式操作

//  声明唯一性识别函数
var identify = function(d) {
    return d !== undefined ? d : this.id;
}
//  不断进行集合运算,假定有上面的预置DOM,返回的结果为[2, 3]
var joins = d3.selectAll('.list-group-item').data([1, 2, 3], identify).data([2, 3, 4], identify)    
//  所有.list-group-item元素的数据都为[2, 3, 4]
var update = d3.selectAll('.list-group-item').datum([1, 2, 3], identify).datum([2, 3, 4], identify) 

6. 空元素操作

假定页面中不存在header元素。

//  不会添加任何元素
d3.select('header').datum({name : 'yiifaa'}).append('header').text(function (d) {
    return d.name;
})
//  会添加元素
 d3.select('header').data([{name : 'yiifaa'}]) //  务必确认赋值一定是数组
   .enter().append('header').text(function (d) {
            return d.name;
   })
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值