Je cherche à ajouter html sur un rectangle dans D3 pour me donner une info-bulle de plusieurs lignes. La partie inférieure est comment j'ajoute un rectangle qui peut faire partie du problème. Le sommet est le code qui devrait fonctionner dans mon monde.
newRect.().html(" <textArea font-family=Verdana font-size=20 fill=blue > Test " + "</br>" + "Test2 </textArea>");
Ce qui insère un champ de texte dans le SVG, il n’a tout simplement pas l’affichage suivant:
HTML :
<rect id="rectLabel" x="490" y="674" width="130" height="160" fill="red">
<textarea fill="blue" font-size="20" font-family="Verdana"> Test </br>Test2 </textarea>
</rect>
J'ai une fonction de survol de la souris qui fonctionne comme suit:
newRect = svg.append("rect")
.attr("x", xCor)
.attr("y", yCor)
.attr("width", 130)
.attr("height", 160)
.attr("fill", "red")
.attr("id", "rectLabel");
Je pense que je devrais le faire mais ça ne marche pas. Cela supprime simplement le nœud g.node auquel j'essaie d'ajouter.
newRect = $(this).enter().append("rect")
.attr("x", xCor)
.attr("y", yCor)
.attr("width", 130)
.attr("height", 160)
.attr("fill", "red")
.attr("id", "rectLabel");
Question: Pourquoi mon texte n'apparaît-il pas? J'ai essayé .html, .textArea. Je veux une étiquette à plusieurs lignes pour que je ne pense pas que .text fonctionnera correctement? Aussi, comment devrais-je ajouter le rectangle?
Un rect
ne peut pas contenir d'élément text
. À la place, transformez un élément g
avec l'emplacement du texte et du rectangle, puis ajoutez-y le rectangle et le texte:
var bar = chart.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function(d, i) { return "translate(0," + i * barHeight + ")"; });
bar.append("rect")
.attr("width", x)
.attr("height", barHeight - 1);
bar.append("text")
.attr("x", function(d) { return x(d) - 3; })
.attr("y", barHeight / 2)
.attr("dy", ".35em")
.text(function(d) { return d; });
http://bl.ocks.org/mbostock/7341714
Les étiquettes multilignes sont également un peu délicates, vous pouvez vérifier ceci fonction de bouclage .
Avez-vous essayé le SVG text element?
.append("text").text(function(d, i) { return d[whichevernode];})
rect L'élément n'autorise pas texte L'élément à l'intérieur. Il ne permet que des éléments descriptifs (<desc>, <metadata>, <title>
) et des éléments d’animation (<animate>, <animatecolor>, <animatemotion>, <animatetransform>, <mpath>, <set>
)
Ajoutez l'élément de texte en tant que frère et travaillez sur le positionnement.
[~ # ~] met à jour [~ # ~]
En utilisant le groupement g, que diriez-vous de ce genre de chose? violon
Vous pouvez certainement déplacer la logique vers une classe CSS que vous pouvez ajouter à, supprimer du groupe (this.parentNode)