web-dev-qa-db-fra.com

bonne façon de dire si ma sélection a attrapé des éléments existants

Je fais une bascule dans d3 et j'essaie d'éviter les variables globales. 

Je peux aller de l'avant et sélectionner l'élément comme s'il était déjà dans la scène:

d3.select('#awesome_line_graph')

puis testez pour voir si j'ai attrapé quelque chose en utilisant 

if (d3.select('#awesome_line_graph')[0].every(function(d){return d===null})){
    // draw awesome line graph
} else {
    d3.select('#awesome_line_graph').remove()
}

mais ce test pour l'élément zéro dans peut-être plus d'une chose nulle semble terrible et hacky. Comment devrais-je le faire à la place? Toutes mes excuses pour ne pas savoir beaucoup de javascript. 

40
Mike Dewar

Utilisez selection.empty() . De plus, si la sélection est vide, il n'est pas nécessaire de la supprimer.

77
mbostock

Je vous recommande fortement de lire le document D3 Workshop de Mike Bostock. Il y explique comment une sélection renvoie un tableau d'éléments correspondant aux critères de sélection. Par conséquent, si la longueur du tableau est supérieure à "0", la correspondance et la sélection sont correctes.

Vous pouvez également vouloir lire sa documentation sur " Sélections imbriquées ". Je l'ai trouvé très utile.

J'espère que ça aide.

Franc

4

Utiliser length ne fera pas comme un seul objet contenant tous les résultats sera retourné dans les deux cas. Peut-être que vous pourriez faire quelque chose comme ...

var selected = d3.select('#selected');
if (selected._group[0][0] == null) { 
    // nothing found 
} else { 
    // found something 
}                                   
0
Olivier Larochelle