1. 程式人生 > >d3選擇集合的操作方法(四):sort與order

d3選擇集合的操作方法(四):sort與order

      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();