En fait, j'ai eu recours à un peu de ruse pour traiter cela à la fois. J'ai développé un jQuery barre de défilement widget où j'ai rencontré le problème que je ne sais pas à l'avance si le défilement de contenu est une partie d'un morceau caché de balisage ou pas. Voici ce que j'ai fait:
// try to grab the height of the elem
if (this.element.height() > 0) {
var scroller_height = this.element.height();
var scroller_width = this.element.width();
// if height is zero, then we're dealing with a hidden element
} else {
var copied_elem = this.element.clone()
.attr("id", false)
.css({visibility:"hidden", display:"block",
position:"absolute"});
$("body").append(copied_elem);
var scroller_height = copied_elem.height();
var scroller_width = copied_elem.width();
copied_elem.remove();
}
Cela fonctionne pour la plupart, mais il y a un problème évident qui peut potentiellement venir. Si le contenu vous êtes le clonage est en forme avec CSS qui inclut des références à des parents de balisage dans leurs règles, le contenu cloné ne contiennent pas le style approprié, et auront probablement des dimensions légèrement différentes. Pour contourner ce problème, vous pouvez vous assurer que le balisage vous êtes le clonage a des règles CSS appliquées à ce que ne comprennent pas les références à la mère de balisage.
Aussi, ce n'est pas venu pour moi avec mon curseur widget, mais à la hauteur de l'élément cloné, vous aurez besoin de définir la largeur de la même largeur de l'élément parent. Dans mon cas, un CSS largeur était toujours appliquée à l'élément, donc je n'ai pas à vous inquiéter à ce sujet, cependant, si l'élément n'a pas une largeur appliqué, vous devrez peut-être faire une sorte de récursive de la traversée de l'élément du DOM de l'ascendance pour trouver le parent de l'élément de largeur.