1. 程式人生 > >d3選擇集合的操作方法(一):select與selectAll

d3選擇集合的操作方法(一):select與selectAll

      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>