8
votes

JQuery Width () renvoie 0 pour un élément de plage créé à la volée?

J'essaie de déterminer la largeur d'une chaîne. J'utilise le code suivant, mais cela revient toujours 0. Il semble que l'élément de l'enveloppe soit créé et non déjà présent dans le corps de la page, la largeur de jQuery () renvoie 0. Y a-t-il un moyen de pouvoir obtenir le Largeur du texte sans recourir à la création de code HTML dummy dans la page?

Merci:) P>

$('<span>test</span>').width(); // width = 0
$('span.width').width(); // returns a width value

<body><span class="width">test</span></body>


0 commentaires

5 Réponses :


1
votes

Vous pouvez essayer d'ajouter le contrôle avec la visibilité de la propriété CSS : Caché à la page avant d'obtenir la taille, évitant ainsi la nécessité de rendre l'élément visible.

Il n'y a aucun moyen d'obtenir la largeur sans ajouter le contrôle, car beaucoup de choses différentes peuvent interférer avec la largeur.


0 commentaires

8
votes

L'élément doit être présent dans le DOM afin que la largeur soit calculée. Si vous devez calculer cela avant que l'utilisateur puisse voir l'élément, essayez de le cacher avant de la mettre dans le DOM.


0 commentaires

0
votes

J'ai atteint ici parce que pourquoi faisait des tests avec Jasmine et devait calculer la largeur des objets JQuery créés à la volée.

La solution pour les ajouter à un DOM pour les tests était la suivante: http://testdrivenwebsites.com/2010/ 07/29 / HTML-Fixtures-in-Jasmine-à l'aide de Jasmine-JQuery /


0 commentaires

0
votes

vous ne peut pas Définir une largeur d'un élément en ligne afin que vous obtiendrez probablement toujours 0 ou null, ou indéfini, ou une variation de sortie qui ne vous aidera pas du tout.


0 commentaires

0
votes

Si vous définissez la largeur avec en ligne CSS, je pense que la largeur renvoie la valeur correcte. Pas idéal, mais pourrait être correct pour certains contextes.


0 commentaires