d3選擇集合的操作方法(一):select與selectAll
阿新 • • 發佈:2019-02-05
select與selectAll返回的結果都是d3的選擇集合,並且都能進行集合運算,唯一不同的是集合的數量,select的數量恆小於等於1,並且總是返回第一個元素(如果存在的話),最令人驚訝的是,select還難以建立集合的父子關係;而selectAll則是選擇的所有元素。
假定文件中現有的dom元素如下所示:
<body>
<ul id="user-list">
<li class="list-group-item">0001
</li>
<li class="list-group-item" >0002
</li>
</ul>
</body>
測試的相關程式碼如下所示:
alert(d3.select('#user-list>li.list-group-item').size()); // 輸出1
alert(d3.selectAll('#user-list>li.list-group-item').size()); // 輸出2
// 假定資料集合的內容如下
var datas = [{
name : "yiifaa",
age : 32
}, {
name : "yiifee" ,
age : 29
}, {
name : "yiifoo",
age : 29
}];
// 集合操作
d3.select('#user-list')
.select('li.list-group-item')
.data(datas)
.enter() // 因為現有的集合裡只有一個元素,所以還能新增一個元素
.append('li')
.classed('list-group-item', true)
.text(function(d) {
return d.name;
});
// 如果把上面的第二個選擇語句換為selectAll
var addItems = d3.select('#user-list')
.select('li.list-group-item')
.data(datas)
.enter();
// 現有的集合與比較的集合都是兩個元素,所以新增的元素為0
alert(addItems.size()); // 輸出0
執行上面的程式碼後,輸出的HTML節點如下所示,請仔細觀察select新增元素的插入位置:
<body>
<ul id="user-list">
<li class="list-group-item">0001
</li>
<li class="list-group-item">0002
</li>
</ul>
</body>
<!-- 新插入的元素竟然會放置在這裡,真是讓人驚訝 -->
<li class="list-group-item">yiifee</li>