मैंने वास्तव में कई बार इससे निपटने के लिए थोड़े से छलावे का सहारा लिया है। मैंने एक jQuery स्क्रॉलबार विजेट विकसित किया है जहाँ मुझे इस समस्या का सामना करना पड़ा है कि मैं समय से पहले नहीं जानता कि स्क्रॉल करने योग्य सामग्री मार्कअप के छिपे हुए टुकड़े का हिस्सा है या नहीं। यहाँ मैंने क्या किया है:
// 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();
}
यह अधिकांश भाग के लिए काम करता है, लेकिन एक स्पष्ट समस्या है जो संभावित रूप से सामने आ सकती है। यदि आपके द्वारा क्लोन की जा रही सामग्री को CSS के साथ स्टाइल किया गया है, जिसमें उनके नियमों में पैरेंट मार्कअप के संदर्भ शामिल हैं, तो क्लोन की गई सामग्री में उपयुक्त स्टाइलिंग नहीं होगी, और संभवतः थोड़े अलग माप होंगे। इसके आस-पास जाने के लिए, आप यह सुनिश्चित कर सकते हैं कि जिस मार्कअप की आप क्लोनिंग कर रहे हैं, उसमें सीएसएस के नियम लागू हैं, जिसमें पैरेंट मार्कअप के संदर्भ शामिल नहीं हैं।
इसके अलावा, यह मेरे स्कॉलर विजेट के साथ मेरे लिए नहीं आया, लेकिन क्लोन किए गए तत्व की उचित ऊंचाई पाने के लिए, आपको मूल तत्व की चौड़ाई को चौड़ाई सेट करने की आवश्यकता होगी। मेरे मामले में, एक सीएसएस चौड़ाई हमेशा वास्तविक तत्व पर लागू होती थी, इसलिए मुझे इस बारे में चिंता करने की ज़रूरत नहीं थी, हालांकि, अगर तत्व में चौड़ाई लागू नहीं है, तो आपको किसी प्रकार की पुनरावृत्ति करने की आवश्यकता हो सकती है उचित मूल तत्व की चौड़ाई का पता लगाने के लिए तत्व के डोम वंश का ट्रैवर्सल।