What's the right way to conditionally append HTML elements with D3.js?











up vote
0
down vote

favorite












In D3.js, how do you achieve the following?



selection
.append('td')
// if the current datum is X
.append('a');
// else
.append('span');


In addition, if my data has the following structure:



data = [{
x: {
id: 1,
},
y: {
members: [{
id: 1
}, {
id: 2
}, {
id: 3
}]
}
}, {
// ...
}, {
// ...
}]


I have data bound to a ul element, and in each li I would like to display the members of each entry in a table. So basically



list.append('ul')
list.selectAll('li').data(data).enter().append('li')


and for each li



li.append('table')
table.data(function(d) { return d.y.members; })


where d is an entry of data.



Now how do I achieve what's described in the first question, where the condition is x.id === members.id? How is a child supposed to access the parent's datum?










share|improve this question


























    up vote
    0
    down vote

    favorite












    In D3.js, how do you achieve the following?



    selection
    .append('td')
    // if the current datum is X
    .append('a');
    // else
    .append('span');


    In addition, if my data has the following structure:



    data = [{
    x: {
    id: 1,
    },
    y: {
    members: [{
    id: 1
    }, {
    id: 2
    }, {
    id: 3
    }]
    }
    }, {
    // ...
    }, {
    // ...
    }]


    I have data bound to a ul element, and in each li I would like to display the members of each entry in a table. So basically



    list.append('ul')
    list.selectAll('li').data(data).enter().append('li')


    and for each li



    li.append('table')
    table.data(function(d) { return d.y.members; })


    where d is an entry of data.



    Now how do I achieve what's described in the first question, where the condition is x.id === members.id? How is a child supposed to access the parent's datum?










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      In D3.js, how do you achieve the following?



      selection
      .append('td')
      // if the current datum is X
      .append('a');
      // else
      .append('span');


      In addition, if my data has the following structure:



      data = [{
      x: {
      id: 1,
      },
      y: {
      members: [{
      id: 1
      }, {
      id: 2
      }, {
      id: 3
      }]
      }
      }, {
      // ...
      }, {
      // ...
      }]


      I have data bound to a ul element, and in each li I would like to display the members of each entry in a table. So basically



      list.append('ul')
      list.selectAll('li').data(data).enter().append('li')


      and for each li



      li.append('table')
      table.data(function(d) { return d.y.members; })


      where d is an entry of data.



      Now how do I achieve what's described in the first question, where the condition is x.id === members.id? How is a child supposed to access the parent's datum?










      share|improve this question













      In D3.js, how do you achieve the following?



      selection
      .append('td')
      // if the current datum is X
      .append('a');
      // else
      .append('span');


      In addition, if my data has the following structure:



      data = [{
      x: {
      id: 1,
      },
      y: {
      members: [{
      id: 1
      }, {
      id: 2
      }, {
      id: 3
      }]
      }
      }, {
      // ...
      }, {
      // ...
      }]


      I have data bound to a ul element, and in each li I would like to display the members of each entry in a table. So basically



      list.append('ul')
      list.selectAll('li').data(data).enter().append('li')


      and for each li



      li.append('table')
      table.data(function(d) { return d.y.members; })


      where d is an entry of data.



      Now how do I achieve what's described in the first question, where the condition is x.id === members.id? How is a child supposed to access the parent's datum?







      javascript d3.js






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 9 at 3:41









      melonccoli

      138211




      138211
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          Look at selection call https://github.com/d3/d3-selection#selection_call
          You can define a function and depending on your parameters you can append and modify your selection



          function modify(selection, param) {
          if(param === "something"){
          selection
          .append("rect")
          .attr("width", 100)
          .attr("height", 100)
          .attr("x", 100)
          .attr("y", 100)
          }else{
          selection
          .append("text")
          .text("NOTHING")
          .attr("y", 100)
          .attr("x", 100)

          }
          }

          d3.select("svg").call(modify, "something")
          d3.select("svg").call(modify, "")





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














             

            draft saved


            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53219531%2fwhats-the-right-way-to-conditionally-append-html-elements-with-d3-js%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            Look at selection call https://github.com/d3/d3-selection#selection_call
            You can define a function and depending on your parameters you can append and modify your selection



            function modify(selection, param) {
            if(param === "something"){
            selection
            .append("rect")
            .attr("width", 100)
            .attr("height", 100)
            .attr("x", 100)
            .attr("y", 100)
            }else{
            selection
            .append("text")
            .text("NOTHING")
            .attr("y", 100)
            .attr("x", 100)

            }
            }

            d3.select("svg").call(modify, "something")
            d3.select("svg").call(modify, "")





            share|improve this answer

























              up vote
              0
              down vote













              Look at selection call https://github.com/d3/d3-selection#selection_call
              You can define a function and depending on your parameters you can append and modify your selection



              function modify(selection, param) {
              if(param === "something"){
              selection
              .append("rect")
              .attr("width", 100)
              .attr("height", 100)
              .attr("x", 100)
              .attr("y", 100)
              }else{
              selection
              .append("text")
              .text("NOTHING")
              .attr("y", 100)
              .attr("x", 100)

              }
              }

              d3.select("svg").call(modify, "something")
              d3.select("svg").call(modify, "")





              share|improve this answer























                up vote
                0
                down vote










                up vote
                0
                down vote









                Look at selection call https://github.com/d3/d3-selection#selection_call
                You can define a function and depending on your parameters you can append and modify your selection



                function modify(selection, param) {
                if(param === "something"){
                selection
                .append("rect")
                .attr("width", 100)
                .attr("height", 100)
                .attr("x", 100)
                .attr("y", 100)
                }else{
                selection
                .append("text")
                .text("NOTHING")
                .attr("y", 100)
                .attr("x", 100)

                }
                }

                d3.select("svg").call(modify, "something")
                d3.select("svg").call(modify, "")





                share|improve this answer












                Look at selection call https://github.com/d3/d3-selection#selection_call
                You can define a function and depending on your parameters you can append and modify your selection



                function modify(selection, param) {
                if(param === "something"){
                selection
                .append("rect")
                .attr("width", 100)
                .attr("height", 100)
                .attr("x", 100)
                .attr("y", 100)
                }else{
                selection
                .append("text")
                .text("NOTHING")
                .attr("y", 100)
                .attr("x", 100)

                }
                }

                d3.select("svg").call(modify, "something")
                d3.select("svg").call(modify, "")






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 9 at 7:10









                cal_br_mar

                53127




                53127






























                     

                    draft saved


                    draft discarded



















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53219531%2fwhats-the-right-way-to-conditionally-append-html-elements-with-d3-js%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Landwehr

                    Reims

                    Schenkenzell