2012-03-28 5 views
7

मैं एक div कंटेनर की चौड़ाई प्राप्त करने की कोशिश कर रहा हूं ताकि दूसरे div में दूसरी सीएसएस विशेषता को सेट किया जा सके, जिसे मैं पृष्ठ के बाद जानता था पूरी तरह से लोड और प्रस्तुत किया।jQuery: दस्तावेज तैयार होने के बाद div-width प्राप्त करें और

$().ready(function() { 
    doLayout(); 
} 
function doLayout() { 
    var $width = $("#sidebar").attr("width"); 
    $("#content").css("left", width); 
} 

समस्या है, इससे पहले कि पेज प्रदान की गई है और इस तरह चौड़ाई विशेषता सेट नहीं है (या "अपरिभाषित") तैयार कहा जाता है:

मैं इस कोड है। मैं वर्तमान चौड़ाई कैसे निर्धारित कर सकता हूं?

संपादित करें: सुझाव दिया परिवर्तन के बाद मैं इस fiddle लेकिन कोड वहाँ काम कर रहा है है, लेकिन मेरा असली आवेदन में यह नहीं है। तो समस्या कहीं और है, मुझे लगता है :(

+0

आप 'दस्तावेज़' कीवर्ड भूल गए हैं। 'वह $ (दस्तावेज़) है। पहले से ही (फ़ंक्शन ...)' –

+2

@aschuler। एपीआई जांचें। तुम गलत हो। हालांकि यह बहिष्कृत है। – gdoron

+0

क्या आप एक स्रोत प्रदान कर सकते हैं? अगर मैं http://api.jquery.com/ready/ पढ़ता हूं तो मुझे '$() तैयार है (हैंडलर) (यह अनुशंसित नहीं है)' –

उत्तर

12

उपयोग load रूप में अच्छी तरह लोड करने के लिए/बाह्य सामग्री सभी छवियों के लिए प्रतीक्षा करने, के रूप में इन तत्व आयाम बदल सकता है:

$(window).load(function() { 
    doLayout(); 
}); 

फिर गणना चौड़ाई प्राप्त करने के लिए, width का उपयोग करें:

$("#content").width(); // width in px 
+1

अपडेट करने के लिए हो सकता है लोड के उपयोग से हो सकता है कि दृश्य प्रतिपादन समस्याएं यह हो सकती हैं कि यह –

+0

धन्यवाद के आधार पर दोनों की एक संयोजन का उपयोग करना चाहें, अब एक कामकाजी पहेली है (देखें संपादित करें पोस्ट) लेकिन मेरा असली कोड अभी भी नहीं है। – lzdt

1
$(document).ready(function() { 
    doLayout(); 
} 


function doLayout() { 
     var width = $("#sidebar").css("width"); 
     $("#content").css("left", width); 
    } 
+0

मैं सीएसएस विशेषता चौड़ाई को नहीं जानना चाहता, क्योंकि यह सेट नहीं है और एचटी चौड़ाई गतिशील है। मैं ब्राउज़र विंडो में वास्तविक rendered आकार जानना चाहता हूँ। – lzdt

+1

आप का उपयोग करना चाहते हैं .css ("width") या outerWidth() या innerWidth() आपको लोड इवेंट आग को टिल करने की भी आवश्यकता हो सकती है। उस दिन के अंत में हमारे पास जाने के लिए बहुत अधिक जानकारी नहीं है, आप हमें दिखाने के लिए जेएस फिडल में प्रासंगिक कोड पोस्ट करना चाहते हैं और हम आपकी समस्या को हल करने के तरीके को बेहतर तरीके से समझा सकते हैं। –

+0

मैंने अपने मूल प्रश्न में काम करने वाली पहेली को जोड़ा है। ईवेंट की आग लोड होने तक मैं "प्रतीक्षा" कैसे कर सकता हूं? (माफ करना अगर उसका बेवकूफ सवाल है, तो मैं इसके लिए नया हूं)। – lzdt

0

उपयोग:

$(document).ready(function() { 
    doLayout(); 
} 

function doLayout() { 
    var width = $("#sidebar").css("width"); 
    $("#content").css("left", width); 
} 

यह आपको मदद नहीं करेगा अगर चौड़ाई एक छवि द्वारा नियंत्रित किया जाता है, साथ छवियों जब गाया नहीं किया जा सकता दस्तावेज़ तैयार है। यदि इससे भी काम नहीं करता है, हम और अधिक संदर्भ की जरूरत है।

+1

मुझे लगता है कि .css ('width') का उपयोग करना बेहतर विकल्प होगा –

+1

आपके द्वारा तय की गई समस्या क्या है? मुझे कोई मतभेद नज़र नहीं आ रहा है। – gdoron

+0

जहां तक ​​मैं $() कुछ फ़ंक्शन (...) और $ (दस्तावेज़) के बीच समझता हूं, कोई फर्क नहीं पड़ता। कुछ फ़ंक्शन (...)। दोनों प्रकारों को मेरे कोड में बुलाया जाएगा लेकिन मेरी चौड़ाई अभी भी "अपरिभाषित" है। – lzdt

2

एक divwidth का कोई विशेषता होगी। यह आप width की एक सीएसएस शैली की संपत्ति है, जो आप .css('width') का उपयोग कर प्राप्त कर सकते हैं नहीं है, लेकिन हो सकता है भी inte हो सकता है outerWidth() या innerWidth() या width() में विश्राम किया गया जो जावास्क्रिप्ट द्वारा गणना की गई चौड़ाई को वापस कर देता है।

कैसे ऊपर उल्लेख किया width तरीकों अलग दस्तावेज में पढ़ा जा सकता है, लेकिन बस का एक अच्छा विवरण;

  1. outerWidth() खाता गद्दी + मार्जिन में ले जाता है
  2. width() खाते में गद्दी लेता
  3. innerWidth() ध्यान में रखता है न।
+1

$() -> $ (दस्तावेज़) –

1

एक समान समस्या थी (offsetWidth 0 था क्योंकि तत्व अभी तक प्रस्तुत नहीं किया गया था)। मैंने एक सरल किया:

setTimeout(function() { 
... do stuff that needed final width of object ... 
}, 0) 

और ऐसा लगता है कि यह मेरे मामले पर बेकार ढंग से काम करता है। जावास्क्रिप्ट वर्तमान कॉलस्टैक खाली होने पर यह मूल रूप से वापस कॉल करने के लिए कहता है।

मुझे लगता है कि अगर आप जावास्क्रिप्ट में एक डोम तत्व बना सकते हैं और इसकी चौड़ाई बाहरी सीएसएस में परिभाषित किया गया है, "100%" होने के लिए offsetWidth (और offsetHeight) की इस वस्तु जावास्क्रिप्ट समाप्त चल रहा है सब से पहले गणना नहीं किया जाएगा ।

setTimeout(callback, 0) का उपयोग करके, ऐसा लगता है कि ब्राउज़र जावास्क्रिप्ट वर्तमान कॉल को समाप्त करने के बाद कहा जाता है और सभी सीओएम तत्वों को सभी सीएसएस लागू करने के लिए समय निकाला है।

संबंधित मुद्दे