官术网_书友最值得收藏!

Selecting multiple elements

Often selecting a single element is not good enough, but rather you want to apply a certain change to a set of elements on the page simultaneously. In this recipe, we will play with the D3 multi-element selector and its selection API.

Getting ready

Open your local copy of the following file in your web browser:

https://github.com/NickQiZhu/d3-cookbook-v2/blob/master/src/chapter2/multiple-selection.html .

How to do it...

This is what the d3.selectAll function is designed for. In the following code snippet, we will select three different p elements and enhance them with some CSS classes:

<p></p> 
<p></p> 
<p></p> 
 
<script type="text/javascript"> 
    d3.selectAll("p") // <-- A 
    .attr("class", "red box"); // <-- B 
</script> 

This code snippet produces the following visual:

Multi-element selection

How it works...

First thing you probably will notice in this example is how similar the usage of D3 selection API is when compared to the single-element version. This is one of the powerful design choices of the D3 selection API. No matter how many elements you target and manipulate, whether one or many, the modifier functions are exactly the same. All the modifier functions we mentioned in the previous section can be applied directly to multi-element selection; in other words, D3 selection is set-based.

Now, with that being said, let's take a closer look at the code example shown in this section, though it is generally pretty simple and self-descriptive. At line A, the d3.selectAll function is used to select all the p elements on the page. The return of this function call is a D3 selection object that contains all the three p elements. Immediately after that, on line B, the attr function was called on this selection to set the class attribute to red box for all three p elements. As shown in this example, the selection and manipulation code are very generic, and will not change even if now we have more than three p elements on the page. This seems to be an insignificant convenience for now, but in later chapters, we will show how this convenience can make your visualization code simpler and easier to maintain.

主站蜘蛛池模板: 武山县| 青浦区| 舒兰市| 广水市| 荣成市| 江口县| 陇西县| 神木县| 英吉沙县| 新绛县| 什邡市| 东阳市| 海城市| 长治县| 昌图县| 辽阳市| 达尔| 那坡县| 上蔡县| 朝阳县| 恩施市| 松桃| 翁源县| 德清县| 江城| 兴宁市| 郯城县| 元江| 崇义县| 会东县| 土默特左旗| 大洼县| 来安县| 弥勒县| 策勒县| 定南县| 池州市| 子洲县| 黎城县| 镇沅| 长泰县|