2008-10-21 9 views
6

मैं सभी लोकप्रिय जेएस पुस्तकालयों के माध्यम से स्कैन कर रहा हूं, लेकिन मुझे ऐसा कोई नहीं मिल रहा है जिसमें एक डीओएम तत्व के लिए चौड़ाई कार्य है जो वास्तव में इंटरनेट एक्सप्लोरर में क्विर्क मोड के लिए खाता है। मुद्दा यह है कि क्विर्क मोड व्यस्त होने पर पैडिंग और सीमाओं को चौड़ाई में गिना नहीं जाता है। जहां तक ​​मैं यह कह सकता हूं कि जब डॉक्टरेट छोड़ दिया जाता है या डक्टटाइप एचटीएमएल 3.2 पर सेट होता है।जावास्क्रिप्ट में quirks मोड के लिए एक तत्व लेखांकन की चौड़ाई?

स्पष्ट रूप से मैं सिर्फ कुछ मानकों के अनुरूप सिद्धांत स्थापित कर सकता हूं, लेकिन इस स्क्रिप्ट को कहीं भी एम्बेड किया जा सकता है, इसलिए मेरे पास डॉक्टरेट पर नियंत्रण नहीं है।

1) आप पता कैसे लगाते हैं quirks मोड:

छोटे भागों में समस्या को तोड़ने के लिए? 2) किसी तत्व से क्षतिपूर्ति करने के लिए सीमा और पैडिंग निकालने का सबसे अच्छा तरीका क्या है?

प्रोटोटाइप के साथ उदाहरण:

<html> 
<head> 
</head> 
<body> 

<div id="mydiv" style="width: 250px; pading-left: 1px; border: 2px black solid">hello</div> 

<script> 
    alert($('mydiv').getWidth()) 
</script> 

</body> 
</html> 

परिणाम:

253 (एफएफ) 250 (यानी)

अग्रिम धन्यवाद!

उत्तर

2

@ 1

document.compatMode 

"CSS1Compat" "मानकों मोड" और "BackCompat" का अर्थ है "quirks मोड" का अर्थ है।

@ एक HTML तत्वों की 2

offsetWidth संपत्ति पिक्सल में, स्क्रीन पर इसकी चौड़ाई देता है।

<div id="mydiv" style="width: 250px; padding-left: 1px; border: 2px black solid">hello</div> 

document.getElementById('mydiv').offsetWidth 
//255 (standards) 250 (quirks) 

एक समारोह क्षतिपूर्ति कि IE quirksmode के लिए चौड़ाई तो चौड़ाई के लिए सीमाओं और गद्दी जोड़ने प्रतिपादन मोड के लिए जाँच करने के लिए है;

var div = document.getElementById('mydiv') 
// will try to calculate target width, but won't be able to work with units other than px 
compensateWidth(div); 

//if you know what the width should be in standards mode 
compensateWidth(div, 254); 
+0

कहाँ से आए currentStyle विशेषता है:

function compensateWidth(el, targetWidth){ var removeUnit = function(str){ if(str.indexOf('px')){ return str.replace('px','') * 1; } else { //because won't work for other units... one may wish to implement return 0; } } if(document.compatMode && document.compatMode=="BackCompat"){ if(targetWidth && el.offsetWidth < targetWidth){ el.style.width = targetWidth; } else if (el.currentStyle){ var borders = removeUnit(el.currentStyle['borderLeftWidth']) + removeUnit(el.currentStyle['borderRightWidth']); var paddings = removeUnit(el.currentStyle['paddingLeft']) + removeUnit(el.currentStyle['paddingRight']); el.style.width = el.offsetWidth + borders + paddings +'px'; } } } 

अब दो इसका इस्तेमाल करने के तरीके हैं? मैं इसे एफएफ में कोशिश कर रहा हूं और ऐसा लगता है कि – christoff

+0

वर्तमान स्टाइल आईई का संस्करण प्राप्त करने के लिए कॉम्प्यूटेड स्टाइल() है। यह दिए गए सीएसएस संपत्ति का वास्तविक मूल्य देता है। आप पीपीके के लेख में और अधिक पढ़ सकते हैं: http://www.quirksmode.org/dom/getstyles.html – pawel

+0

प्रोटोटाइप के साथ, आप Element.getStyle() का भी उपयोग कर सकते हैं। –

1

लाइब्रेरी शायद सच कह रही है। समस्या यह नहीं है कि रीडिंग्स असंगत हैं लेकिन यह कि अचूक प्रदर्शन असंगत है। एक उदाहरण के रूप में प्रयास करें:

<div id="mydiv" style="width: 100px; border-left: 100px black solid;">&nbsp;</div> 

फिर क्या हो रहा है यह देखने के लिए div के अंदर पाठ को बदलने का प्रयास करें। आईई अंदर पाठ के आधार पर विभिन्न मूल्य प्रदर्शित करेगा जबकि एफएफ सही तरीके से प्रदर्शित होगा। आईई विभिन्न परिणामों के साथ एक 100px अंतरिक्ष में 100px + कुछ भरने की कोशिश कर रहा है।

jQuery की चौड़ाई के लिए दो विधियां हैं: विविथ और .उटरविड्थ। .उटरविड्थ तत्व की पूरी चौड़ाई वापस कर देगा।

$(document).ready(function() { 
    alert("width=" + $('#mydiv').width() 
    + " outerWidth=" + $('#mydiv').outerWidth() 
    + " borderLeftWidth=" + $('#mydiv').css("borderLeftWidth")) 
}); 
1
javascript:(function(){ 
    var mode=document.compatmode,m;if(mode){ 
     if(mode=='BackCompat')m='quirks'; 
     else if(mode=='CSS1Compat')m='Standard'; 
     else m='Almost Standard'; 
     alert('The page is rendering in '+m+' mode.'); 
    } 
})(); 

कि कोड आप के लिए मोड की पहचान करेगा: यह भी उदाहरण bellow में की तरह अन्य सभी गुण (पैडिंग, बॉर्डर आदि) प्राप्त करने के लिए possiblity है।

आईई कुछ भी अगर क्विर्क मोड में फेंक देगा तो कुछ भी नहीं बल्कि डक्टटाइप पहली पंक्ति पर है। दूसरी पंक्ति पर डॉक्टरेट के साथ भी एक खाली पहली पंक्ति क्विर्क मोड का कारण बन जाएगी।

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