2011-10-06 2 views
5

Je ne sais pas quel (s) aspect (s) de javascript, le DOM ou d3.js cela expose mon manque de connaissance de: sachez que je suis désolé d'être poser une question aussi fondamentale que la suivante. Je suis nouveau ici.d3.js: comment parcourir le DOM

J'ai un JSON comme ceci:

[{"link":"a", "count": 3}, {"link":"b", "count": 4}, {"link":"c", "count": 2}] 

et je voudrais faire quelque chose qui ressemble

<ul> 
    <li> <a>a</a> (3)</li> 
    <li> <a>b</a> (4)</li> 
    <li> <a>c</a> (2)</li> 
</ul> 

utilisant d3.js (pour répondre à l'évidence: je veux faire beaucoup plus avec d3, cela capture juste un problème que j'ai).

Après popping une balise <ul> dans mon html, quelque part dans un rappel de d3.json Je peux écrire quelque chose comme ceci:

d3.select("ul") 
    .selectAll("li") 
    .data(json) 
    .enter() 
    .append("li") 
    .append("a") 
    .text(function(d){return d.link}) 

(! Bien que ce soit non testé comment les gens javascript tester petits bouts de code) . Cela (probablement) me donner

<ul> 
    <li><a>a</a></li> 
    <li><a>b</a></li> 
    <li><a>c</a></li> 
</ul> 

mais maintenant je ne peux pas sortir de l'étiquette <a>! Je ne peux pas comprendre quelle combinaison impie de this et en sélectionnant les parents ou ce que je dois faire pour virer sur cette information supplémentaire avant la fin de la balise d'article de liste. Qu'est-ce que je dois faire?

+2

« comment les gens javascript tester des petits bouts de code? " - http://jsfiddle.net/ –

+0

Je ne connais pas la syntaxe d3, mais ne pourriez-vous pas simplement afficher d.count dans l'élément 'li' avant de passer le 'a'? De ce fait contournant le besoin de traverser vers le haut? – dougajmcdonald

+0

@dougajmcdonald ne serait-ce pas mettre le d.count en face du lien au lieu de après? –

Répondre

11

Simple: ne passez pas par-dessus bord avec le chaînage de méthode. :)

var ul = d3.select("ul"); 

var li = ul.selectAll("li") 
    .data(json) 
    .enter().append("li"); 

var a = li.append("a") 
    .text(function(d) { return d.link; }); 

Maintenant, vous pouvez ajouter d'autres choses à la li. Dans ce cas, étant donné que D3 ne vous permet d'ajouter des éléments (plutôt que des nœuds de texte brut), vous aurez probablement envie d'ajouter une durée pour le texte entre parenthèses:

li.append("span") 
    .text(function(d) { return " (" + d.count + ")"; }); 
+0

Merci beaucoup! pour quelque raison que je ne suis pas très sûr d'essayer d'éviter les variables à tout prix. J'arrêterai de faire ça. –