दिलचस्प पोस्ट
बाइट्स के लिए NSString (हेक्स) git: शाखाओं का नाम दूर से? क्या पॉपअपमेनू में आइकन प्रदर्शित करना संभव है? पायथन में संस्करण स्ट्रिंग की तुलना करें <a> जो किसी href को कुछ स्ट्रिंग से समाप्त होता है का चयन करें विंडोज फोन 8 में पीडीएफ फाइल कैसे खोलें? java-ffmpeg wrapper का उपयोग करें, या बस ffmpeg निष्पादित करने के लिए जावा रनटाइम का उपयोग करें? जावा एक सरणी से डुप्लिकेट निकालें? जावा स्ट्रिंग.substring विधि संभावित स्मृति रिसाव? JsonProperty (PropertyName = "someName") को कैसे रद्द करें, जब json serializing? php – क्या मुझे फोन करने के बाद बाहर निकलना चाहिए (कॉल): हेडर? जेपीए @ एंटीटी के अंदर बीन इंजेक्शन JTextArea के केवल भागों में बोल्ड टेक्स्ट कैसे प्रदर्शित करें? एंड्रॉइड बटन को अक्षम कैसे करें? स्विंग में छवि डिस्प्ले के लिए खराब फ़ाइल चयन कैसे संभालना है

क्या मैं जावास्क्रिप्ट के जरिए गैर-मानक सीएसएस संपत्ति का मूल्य प्राप्त कर सकता हूं?

मैं एक कस्टम (गैर-मानक) सीएसएस संपत्ति को पढ़ने की कोशिश कर रहा हूं, जो एक स्टाइलशीट में सेट है (इनलाइन शैली विशेषता नहीं है) और उसका मान प्राप्त करें। उदाहरण के लिए इस सीएसएस को लें:

#someElement { foo: 'bar'; } 

मैं आईई 7 में मौजूदा स्टाइल प्रॉपर्टी के साथ अपना मूल्य प्राप्त करने में कामयाब रहा हूं:

 var element = document.getElementById('someElement'); var val = element.currentStyle.foo; 

लेकिन मौजूदा स्टाइल एमएस-विशिष्ट है तो मैंने फ़ायरफ़ॉक्स 3 और सफारी 3 में कॉम्प्यूप्टेड स्टाइल () प्राप्त करने की कोशिश की:

 var val = getComputedStyle(element,null).foo; 

… और यह रिटर्न अनिर्धारित है क्या कोई कस्टम सीएसएस प्रॉपर्टी वैल्यू को पुन: प्राप्त करने का क्रॉस-ब्राउज़र तरीका जानता है?

(जैसा आपने देखा होगा, यह मान्य सीएसएस नहीं है, लेकिन जब तक मान सही सिंटैक्स का अनुसरण करता है तब तक काम करना चाहिए। बेहतर गुण नाम "-myNameSpace-foo" या कुछ और होगा।)

Solutions Collecting From Web of "क्या मैं जावास्क्रिप्ट के जरिए गैर-मानक सीएसएस संपत्ति का मूल्य प्राप्त कर सकता हूं?"

फ़ायरफ़ॉक्स टैग्स, एट्रिब्यूट्स या सीएसएस शैलियों पर नहीं ले जाता है, जो कोड को डीओएम तक नहीं समझता है। यह डिजाइन द्वारा है जावास्क्रिप्ट में केवल DOM तक पहुँच है, न कि कोड। तो नहीं, जावास्क्रिप्ट से एक संपत्ति का उपयोग करने का कोई तरीका नहीं है जो कि ब्राउज़र स्वयं का समर्थन नहीं करता है।

आधुनिक ब्राउज़र केवल किसी भी अवैध सीएसएस को फेंक देंगे। हालांकि, आप सामग्री सम्पत्ति का उपयोग कर सकते हैं क्योंकि इसके बाद ही इसका प्रभाव पड़ता है :after में :before आदि। आप इसके अंदर JSON स्टोर कर सकते हैं:

 #someElement { content: '{"foo": "bar"}'; } 

फिर इसे पुनर्प्राप्त करने के लिए कोड का उपयोग करें:

 var CSSMetaData = function() { function trimQuotes( str ) { return str.replace( /^['"]/, "" ).replace( /["']$/, "" ); } function fixFirefoxEscape( str ) { return str.replace( /\\"/g, '"' ); } var forEach = [].forEach, div = document.createElement("div"), matchesSelector = div.webkitMatchesSelector || div.mozMatchesSelector || div.msMatchesSelector || div.oMatchesSelector || div.matchesSelector, data = {}; forEach.call( document.styleSheets, function( styleSheet ) { forEach.call( styleSheet.cssRules, function( rule ) { var content = rule.style.getPropertyValue( "content" ), obj; if( content ) { content = trimQuotes(content); try { obj = JSON.parse( content ); } catch(e) { try { obj = JSON.parse( fixFirefoxEscape( content ) ); } catch(e2) { return ; } } data[rule.selectorText] = obj; } }); }); return { getDataByElement: function( elem ) { var storedData; for( var selector in data ) { if( matchesSelector.call( elem, selector ) ) { storedData = data[selector]; if( storedData ) return storedData; } } return null; } }; }(); var obj = CSSMetaData.getDataByElement( document.getElementById("someElement")); console.log( obj.foo ); //bar 

ध्यान दें, यह केवल आधुनिक ब्राउज़रों के लिए है डेमो: http://jsfiddle.net/xFjZp/3/

IE में स्टाइलशीट जानकारी में पढ़ने से, आप इन "बोगस" संपत्तियों को प्राप्त कर सकते हैं, लेकिन केवल IE में ही मुझे पता है

 var firstSS = document.styleSheets[0]; var firstSSRule = firstSS.rules[0]; if(typeof(firstSSRule.style.bar) != 'undefined'){ alert('value of [foo] is: ' + firstSSRule.style.bar); } else { alert('does not have [foo] property'); } 

इसकी बदसूरत कोड है, लेकिन आपको चित्र मिलता है।

मेरे पास भी कुछ ऐसे पेज हैं जो एमएसआईई में शानदार तरीके से काम करते हैं, लेकिन शैलियों और स्टाइल शीट्स में बहुत सारी जानकारी हैं इसलिए मैं कार्यवाही के बारे में सोच रहा हूँ फ़ायरफ़ॉक्स एक तरह से, दयालु रूप से, DOM में इनलाइन गुण डाल रहा है। तो यहां एक आंशिक रणनीति है:

  1. प्रत्येक इनलाइन शैली को "nsttyle" के साथ एक HTML दस्तावेज़ में बदलें, जैसे <span class = "cls1" nStyle = "color: red; nref: #myid; foo: bar"> … </ span>

  2. जब पृष्ठ लोड होता है, तो प्रत्येक तत्व नोड के साथ निम्नलिखित कार्य करें: (ए) टैग के सीएसएस टेक्स्ट में nStyle विशेषता के मूल्य की प्रतिलिपि बनाएँ, और एक ही समय में (बी) गैरमानक गुणों को एक आसान प्रारूप में कनवर्ट करें, ताकि, उदाहरण के लिए , node.getAttribute ('nStyle') ऑब्जेक्ट {"nref": "# myid", "foo": "बार"} हो जाता है।

  3. एक "गणना स्टाइल" फ़ंक्शन लिखें जो कि उपलब्ध है पर निर्भर करता है या तो शैली या nsttyle हो जाता है।

स्टाइल शीट्स के लिए किसी न किसी पार्सर को लिखना उनके लिए एक समान रणनीति सक्षम हो सकता है, लेकिन मेरे पास एक सवाल है: फ़ायरफ़ॉक्स से सेंसरशिप के बिना स्टाइल शीट पढ़ने की बाधा को मैं कैसे प्राप्त करूं?

एक तरह से जावास्क्रिप्ट में अपना स्वयं का सीएसएस-पार्सर लिखना होगा। लेकिन मेरा मानना ​​है कि वास्तव में शीर्ष पर है

शायद आप कम से कोशिश कर सकते हैं यह डायनेमिक स्टाइलशीट भाषा है और आप गैर-मानक सीएसएस विशेषताएँ बना सकते हैं, जो बाद में संकलित होंगे।