2013-05-04 6 views
5

मैं थोड़ी उलझन में हूं। मुझे $ .css() विधि से एक तत्व में एक सीएसएस संपत्ति को बेवकूफ रूप से जोड़ने की उम्मीद है, इससे कोई फर्क नहीं पड़ता। आप जानते हैं, क्रोम देव उपकरण की तरह, जब आप किसी तत्व को किसी भी सीएसएस प्रॉपर्टी को लागू करते हैं और यह HTML में दिखाई देता है। लेकिन स्पष्ट रूप से यह किसी भी तरह से जांचता है अगर यह समर्थित है। उदाहरण के लिए, अगर आप इस कमांड चलाएँ:क्यों jQuery.css एक प्रॉपर्टी लागू नहीं करता है अगर यह समर्थित नहीं है और यह कैसे जांच रहा है?

$('#element').css('display','block'); /* returns jQuery object) */ 
$('#element').css('display') /* returns "block" */ 

लेकिन तुम तो

$('#element').css('hurr','durr'); 
$('#element').css('hurr') /* returns undefined */ 

की तरह कुछ डाल दिया है, jQuery जांच करता है कि संपत्ति Appliable है?

एक और उदाहरण। ओपेरा वर्तमान में सीएसएस फिल्टर का समर्थन नहीं करता है। या यह करता है? खैर, मैंने method described here का उपयोग किया और आश्चर्यजनक रूप से यह 'फ़िल्टर' के लिए true लौटा।

$('#element').css('filter','blur(5px)'); 
$('#element').css('filter') /*returns "" (an empty string) * 

तो, न केवल jQuery जाँच करता है तो एक तत्व समर्थित है लेकिन फिर भी जांच करता है कि मूल्य कानूनी है: तो फिर मैं $ .css साथ इसे लागू करने की कोशिश की। यह वास्तव में ऐसा कैसे करता है? यह जांचने का सही तरीका क्या है कि कोई संपत्ति समर्थित है या नहीं?

उत्तर

4

jQuery वास्तव में कुछ मूल्यों को फ़िल्टर कर रहा है, लेकिन यह इस मामले में जानबूझकर ऐसा नहीं कर रहा है। इसे getComputedStyle() का उपयोग करके शैलियों को कैसे प्राप्त किया जाता है, जो स्पष्ट रूप से जानता है कि "hurr" मान्य शैली नहीं है, इसलिए इसे उस हिस्से के रूप में वापस नहीं किया जाता है और फिर जब jQuery "hurr "गणना की शैली में दिखता है, तो यह नहीं है यह वहाँ रिटर्न तो undefined

क्रोम में, शैली मूल्य वास्तव में शैली वस्तु, तब भी जब jQuery के माध्यम से सेट पर वहाँ प्रतीत होता है, लेकिन क्योंकि यह एक वास्तविक शैली नहीं है यह .css() द्वारा ठीक से प्राप्त नहीं होता।

यदि आप असमर्थित शैली मान सेट करना चाहते हैं, तो आप सीधे शैली ऑब्जेक्ट का उपयोग कर सकते हैं लेकिन jQuery कोड में कुछ टिप्पणियों के अनुसार, IE के कुछ संस्करण अपवाद फेंक सकते हैं यदि आप ऐसा कुछ सेट करने का प्रयास करते हैं esn't पता के बारे में:

var elem = document.getElementById("element"); 
elem.style.hurr = "durr"; 
console.log(elem.style.hurr); // in Chrome, gives you "durr" 
+0

@ जुरीबिया - jQuery '.css ("hurr") के माध्यम से ट्रेस करने के बाद, मैंने पाया कि शैली वास्तव में jQuery पर ऑब्जेक्ट पर सेट की जा रही है, लेकिन वापस नहीं पढ़ी है और मैंने उस पर कुछ जानकारी मेरे उत्तर में जोड़ दी है। – jfriend00

5

सीएसएस फ़ंक्शन विभिन्न सीएसएस गुणों तक पहुंचने के विभिन्न तरीकों को मानकीकृत करने के लिए बहुत सारे काम करता है - उदाहरण के लिए, फ्लोट के लिए डब्ल्यू 3 सी मानक संपत्ति cssFloat है, लेकिन इंटरनेट एक्सप्लोरर इसे styleFloat कहता है।

इस वजह से, jQuery केवल स्वीकृत सीएसएस गुणों के साथ काम करता है। filter एक मालिकाना (ब्राउज़र-विशिष्ट) संपत्ति है।

+0

दरअसल, jQuery द्वारा गुण के मानकीकरण क्यों '.css() से कोई लेना देना नहीं है' '" hurr "' शैली मान प्राप्त नहीं करता है। यदि आप '.css (" hurr ") के माध्यम से कदम उठाते हैं, तो आप देख सकते हैं कि jQuery ने 'window.getComputedStyle()' के माध्यम से शैली मूल्य को कैसे पुनर्प्राप्त किया है, जो केवल वास्तविक शैली गुणों को लौटाता है। मेरे उत्तर में और जानकारी देखें। – jfriend00

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