d3選擇集合的操作方法(四):sort與order
阿新 • • 發佈:2018-12-30
sort方法只能對帶有資料的元素進行排序,因此如果對頁面已有的元素但沒有繫結資料的元素進行排序,則需要進行預處理,order能將已排序的元素但已改變順序的元素(如通過raise與lower方法)恢復為排序初始狀態,並且效能表現更佳。
依舊假定頁面中存在的html元素如下:
<ul class="list-group" id="list-group">
<li class="list-group-item">0002</li>
<li class="list-group-item">0001</li>
<li class="list-group-item">0003</li>
</ul>
說明sort與order使用方法的示例程式碼如下:
var items = d3.select("#list-group")
.selectAll(".list-group-item")
// 對元素進行預處理
.each(function(d) {
// 為已有的元素新增資料
if(d === undefined ) {
d3.select(this).datum({
index : parseInt(this.textContent)
})
}
})
// 只能比較資料,並且會改變資料相關的DOM
.sort(function(a, b) {
// 逆序
return b.index - a.index;
})
執行完上面的程式碼後,現在html元素已經是逆序排列了,如下:
<ul class="list-group" id="list-group">
<li class="list-group-item">0003</li>
<li class="list-group-item">0002</li>
<li class="list-group-item">0001</li>
</ul>
通過raise與lower改變html元素的排序,然後再用order將排序恢復,如下:
// 將第二個元素提前
items.filter(function(d) {
return d.index === 2
}).lower();
// 又恢復為逆序了,速度極快
items.order();