दिलचस्प पोस्ट
जावास्क्रिप्ट या (||) चर असाइनमेंट स्पष्टीकरण उत्तरदायी छवि मानचित्र लिनक्स जीसीसी में फोर्क () का कार्य संश्लेषित संपत्ति और चर अंडरस्कोर उपसर्ग के साथ: इसका क्या अर्थ है? ऑटो इंप्रेशन आईडी हाइबरनेट करें आधुनिक पायथन में कस्टम अपवाद घोषित करने का उचित तरीका है? विंडोज बैच: वैरिएबल में स्वरूपित तिथि फ़ोकस पर नारंगी रूपरेखा को अक्षम करें क्रिया बार आकार कैसे बदलूए प्रोजेर्ड नरक – संदर्भित वर्ग नहीं मिल सकता है कैसे एक 3D जाल वस्तु की मात्रा की गणना करने के लिए सतह की त्रिकोण बना दिया है 3 डी सीएसएस ट्रांसफ़ॉर्म, फ़ायरफ़ॉक्स में दांतेदार किनारों शब्द रैप के साथ काम करने के लिए मैं कैसे jqgrid स्थिर कॉलम प्राप्त कर सकता हूं जब लीक उपकरण उन्हें नहीं दिखाता है तो स्मृति लीक को डीबग कैसे करें? एंड्रॉइड: एक छवि दृश्य स्क्रॉल करना

गतिशील रूप से जावास्क्रिप्ट में सीएसएस वर्ग कैसे बनाते हैं और लागू होते हैं?

मुझे जावास्क्रिप्ट में गतिशील रूप से एक सीएसएस स्टाइलशीट क्लास बनाने और इसे कुछ HTML तत्वों जैसे- डिव, टेबल, स्पैन, ट्र, इत्यादि के लिए और एएसपी: टेक्स्टबॉक्स, ड्रॉपडाउन सूची और डेटालिस्ट जैसे कुछ नियंत्रण के लिए आवंटित करना होगा।

क्या यह संभव है?

यह एक नमूना के साथ अच्छा होगा

वेब के समाधान से एकत्रित समाधान "गतिशील रूप से जावास्क्रिप्ट में सीएसएस वर्ग कैसे बनाते हैं और लागू होते हैं?"

हालांकि मुझे यकीन नहीं है कि आप जावास्क्रिप्ट के साथ सीएसएस वर्ग बनाना क्यों चाहते हैं, यहां एक विकल्प है:

var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = '.cssClass { color: #F00; }'; document.getElementsByTagName('head')[0].appendChild(style); document.getElementById('someElementId').className = 'cssClass'; 

एक बेहतर समाधान मिला, जो सभी ब्राउज़रों पर काम करता है
नियमों को जोड़ने या बदलने के लिए document.styleSheet का उपयोग करता है स्वीकार किया जवाब छोटा और आसान है, लेकिन यह IE8 और उससे भी कम में काम करता है।

 function createCSSSelector (selector, style) { if (!document.styleSheets) return; if (document.getElementsByTagName('head').length == 0) return; var styleSheet,mediaType; if (document.styleSheets.length > 0) { for (var i = 0, l = document.styleSheets.length; i < l; i++) { if (document.styleSheets[i].disabled) continue; var media = document.styleSheets[i].media; mediaType = typeof media; if (mediaType === 'string') { if (media === '' || (media.indexOf('screen') !== -1)) { styleSheet = document.styleSheets[i]; } } else if (mediaType=='object') { if (media.mediaText === '' || (media.mediaText.indexOf('screen') !== -1)) { styleSheet = document.styleSheets[i]; } } if (typeof styleSheet !== 'undefined') break; } } if (typeof styleSheet === 'undefined') { var styleSheetElement = document.createElement('style'); styleSheetElement.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(styleSheetElement); for (i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].disabled) { continue; } styleSheet = document.styleSheets[i]; } mediaType = typeof styleSheet.media; } if (mediaType === 'string') { for (var i = 0, l = styleSheet.rules.length; i < l; i++) { if(styleSheet.rules[i].selectorText && styleSheet.rules[i].selectorText.toLowerCase()==selector.toLowerCase()) { styleSheet.rules[i].style.cssText = style; return; } } styleSheet.addRule(selector,style); } else if (mediaType === 'object') { var styleSheetLength = (styleSheet.cssRules) ? styleSheet.cssRules.length : 0; for (var i = 0; i < styleSheetLength; i++) { if (styleSheet.cssRules[i].selectorText && styleSheet.cssRules[i].selectorText.toLowerCase() == selector.toLowerCase()) { styleSheet.cssRules[i].style.cssText = style; return; } } styleSheet.insertRule(selector + '{' + style + '}', styleSheetLength); } } 

फ़ंक्शन निम्नानुसार प्रयोग किया जाता है।

 createCSSSelector('.mycssclass', 'display:none'); 

ध्यान दें कि भले ही फ़ंक्शन का नाम बना है, तो यह वास्तव में एक चयनकर्ता बनाता है। तो जोड़ने के लिए मत भूलना (अवधि) अपने वर्ग के नाम से पहले। उल्लेख करना जरूरी नहीं है कि आप इस समारोह के साथ अन्य चयनकर्ता भी बना सकते हैं।
यहां मिले http://www.happycode.info/create-css-classes-with-javascript/

संक्षिप्त उत्तर, यह "सभी ब्राउज़रों पर" (विशेष रूप से, IE8 / 7) संगत है:

 function createClass(name,rules){ var style = document.createElement('style'); style.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(style); if(!(style.sheet||{}).insertRule) (style.styleSheet || style.sheet).addRule(name, rules); else style.sheet.insertRule(name+"{"+rules+"}",0); } createClass('.whatever',"background-color: green;"); 

और यह अंतिम बिट क्लास को किसी तत्व पर लागू होता है:

 function applyClass(name,element,doRemove){ if(typeof element.valueOf() == "string"){ element = document.getElementById(element); } if(!element) return; if(doRemove){ element.className = element.className.replace(new RegExp("\\b" + name + "\\b","g")); }else{ element.className = element.className + " " + name; } } 

यहाँ एक छोटा परीक्षण पृष्ठ भी है: https://gist.github.com/shadybones/9816763

कुंजी थोड़ा तथ्य यह है कि शैली तत्वों में एक "स्टाइल शीट" / "शीट" संपत्ति होती है जिसे आप नियमों को जोड़ने / हटाने के लिए उपयोग कर सकते हैं।

सीएसएस घोषणाएं उत्पन्न करने की अनुमति देता है जो एक हल्के jQuery प्लगइन है: jQuery-injectCSS

वास्तव में, यह जेएसएस (JSON द्वारा वर्णित सीएसएस) का उपयोग करता है, लेकिन गतिशील सीएसएस स्टाइलशीट उत्पन्न करने के लिए इसे संभालना बहुत आसान है।

 $.injectCSS({ "#test": { height: 123 } }); 

वाईयूआई ने अब तक का सर्वोत्तम स्टाइलशीट उपयोगिता देखा है मैं आपको इसे जांचने के लिए प्रोत्साहित करता हूं, लेकिन यह एक स्वाद है:

 // style element or locally sourced link element var sheet = YAHOO.util.StyleSheet(YAHOO.util.Selector.query('style',null,true)); sheet = YAHOO.util.StyleSheet(YAHOO.util.Dom.get('local')); // OR the id of a style element or locally sourced link element sheet = YAHOO.util.StyleSheet('local'); // OR string of css text var css = ".moduleX .alert { background: #fcc; font-weight: bold; } " + ".moduleX .warn { background: #eec; } " + ".hide_messages .moduleX .alert, " + ".hide_messages .moduleX .warn { display: none; }"; sheet = new YAHOO.util.StyleSheet(css); 

जाहिर है उड़ने पर शैली बदलने के अन्य सरल तरीके हैं, जैसे कि यहां सुझाए गए सुझाव यदि वे आपकी समस्या की समझ रखते हैं, तो वे सबसे अच्छा हो सकते हैं, लेकिन सीएसएस को संशोधित करने का एक बेहतर समाधान क्यों है यह निश्चित रूप से कारण है। सबसे स्पष्ट मामला तब होता है जब आपको बड़ी संख्या में तत्वों को संशोधित करने की आवश्यकता होती है। दूसरा बड़ा मामला है यदि आपको अपनी शैली में परिवर्तन की आवश्यकता होती है ताकि झरना को शामिल किया जाए। एक तत्व को संशोधित करने के लिए dom का उपयोग करना हमेशा एक उच्च प्राथमिकता होगा यह स्लेजहेमर दृष्टिकोण है और यह HTML तत्व पर सीधे शैली विशेषता का उपयोग करने के बराबर है। यही हमेशा वांछित प्रभाव नहीं होता है

IE 9 के रूप में। अब आप एक पाठ फ़ाइल लोड कर सकते हैं और एक शैली निर्धारित कर सकते हैं। इसलिए मूलतः आप अब एजेक्स के माध्यम से एक सीएसएस फ़ाइल लोड कर सकते हैं (और कॉलबैक प्राप्त कर सकते हैं) और फिर इस तरह से एक शैली टैग के अंदर पाठ सेट करें

यह अन्य ब्राउज़रों में काम करता है, निश्चित नहीं है कि कितनी देर तक वापस लेकिन जब तक आपको IE8 का समर्थन करने की आवश्यकता नहीं होती तब तक यह काम करेगा

 // RESULT: doesn't work in IE8 and below. Works in IE9 and other browsers. $(document).ready(function() { // we want to load the css as a text file and append it with a style. $.ajax({ url:'myCss.css', success: function(result) { var s = document.createElement('style'); s.setAttribute('type', 'text/css'); s.innerHTML = result; document.getElementsByTagName("head")[0].appendChild(s); }, fail: function() { alert('fail'); } }) }); 

और फिर आप इसे मेरे सीएसएस.css जैसी बाहरी फ़ाइल खींच सकते हैं

 .myClass { background:#F00; } 

विश्वनाथ के समाधान को थोड़ा टिप्पणी के साथ फिर से लिखा गया है:

 function setStyle(cssRules, aSelector, aStyle){ for(var i = 0; i < cssRules.length; i++) { if(cssRules[i].selectorText && cssRules[i].selectorText.toLowerCase() == aSelector.toLowerCase()) { cssRules[i].style.cssText = aStyle; return true; } } return false; } function createCSSSelector(selector, style) { var doc = document; var allSS = doc.styleSheets; if(!allSS) return; var headElts = doc.getElementsByTagName("head"); if(!headElts.length) return; var styleSheet, media, iSS = allSS.length; // scope is global in a function /* 1. search for media == "screen" */ while(iSS){ --iSS; if(allSS[iSS].disabled) continue; /* dont take into account the disabled stylesheets */ media = allSS[iSS].media; if(typeof media == "object") media = media.mediaText; if(media == "" || media=='all' || media.indexOf("screen") != -1){ styleSheet = allSS[iSS]; iSS = -1; // indication that media=="screen" was found (if not, then iSS==0) break; } } /* 2. if not found, create one */ if(iSS != -1) { var styleSheetElement = doc.createElement("style"); styleSheetElement.type = "text/css"; headElts[0].appendChild(styleSheetElement); styleSheet = doc.styleSheets[allSS.length]; /* take the new stylesheet to add the selector and the style */ } /* 3. add the selector and style */ switch (typeof styleSheet.media) { case "string": if(!setStyle(styleSheet.rules, selector, style)); styleSheet.addRule(selector, style); break; case "object": if(!setStyle(styleSheet.cssRules, selector, style)); styleSheet.insertRule(selector + "{" + style + "}", styleSheet.cssRules.length); break; } 

https://jsfiddle.net/xk6Ut/256/

जावास्क्रिप्ट में गतिशील रूप से सीएसएस वर्ग बनाने और अद्यतन करने के लिए एक विकल्प:

  • सीएसएस अनुभाग बनाने के लिए शैली तत्व का उपयोग करना
  • शैली तत्व के लिए आईडी का उपयोग करना ताकि हम सीएसएस को अपडेट कर सकें
    कक्षा

…..

 function writeStyles(styleName, cssText) { var styleElement = document.getElementById(styleName); if (styleElement) document.getElementsByTagName('head')[0].removeChild( styleElement); styleElement = document.createElement('style'); styleElement.type = 'text/css'; styleElement.id = styleName; styleElement.innerHTML = cssText; document.getElementsByTagName('head')[0].appendChild(styleElement); } 

  var cssText = '.testDIV{ height:' + height + 'px !important; }'; writeStyles('styles_js', cssText) 

उत्तर के माध्यम से देखा गया और सबसे स्पष्ट और सीधे आगे याद आ रही है: document.write() उपयोग करें। लिखना document.write() सीएसएस का एक हिस्सा आपको लिखने की आवश्यकता है।

यहां एक उदाहरण है (इसे कोडपेन पर देखें: http://codepen.io/ssh33/pen/zGjWga ):

 <style> @import url(http://fonts.googleapis.com/css?family=Open+Sans:800); .d, body{ font: 3vw 'Open Sans'; padding-top: 1em; } .d { text-align: center; background: #aaf; margin: auto; color: #fff; overflow: hidden; width: 12em; height: 5em; } </style> <script> function w(s){document.write(s)} w("<style>.long-shadow { text-shadow: "); for(var i=0; i<449; i++) { if(i!= 0) w(","); w(i+"px "+i+"px #444"); } w(";}</style>"); </script> <div class="d"> <div class="long-shadow">Long Shadow<br> Short Code</div> </div> 

एक दिलचस्प परियोजना जो आपको अपने काम में मदद कर सकती है JSS

JSS सीएसएस पर एक बेहतर अमूर्त है। यह जावास्क्रिप्ट को भाषा के रूप में उपयोग करता है ताकि एक घोषणात्मक और रखरखाव के तरीके में शैलियों का वर्णन किया जा सके। यह सीएसएस कंपाइलर के लिए एक उच्च निष्पादन जेएस है जो ब्राउज़र और सर्वर-साइड में रनटाइम पर काम करता है।

जेएसएस पुस्तकालय आपको .attach() फ़ंक्शन का उपयोग करके डोम / हेड अनुभाग में इंजेक्शन लगाने की अनुमति देता है।

मूल्यांकन के लिए ऑनलाइन संस्करण प्रतिलिपि करें

जेएसएस के बारे में अधिक जानकारी

एक उदाहरण:

 // Use plugins. jss.use(camelCase()) // Create your style. const style = { myButton: { color: 'green' } } // Compile styles, apply plugins. const sheet = jss.createStyleSheet(style) // If you want to render on the client, insert it into DOM. sheet.attach() 
 function createCSSClass(selector, style, hoverstyle) { if (!document.styleSheets) { return; } if (document.getElementsByTagName("head").length == 0) { return; } var stylesheet; var mediaType; if (document.styleSheets.length > 0) { for (i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].disabled) { continue; } var media = document.styleSheets[i].media; mediaType = typeof media; if (mediaType == "string") { if (media == "" || (media.indexOf("screen") != -1)) { styleSheet = document.styleSheets[i]; } } else if (mediaType == "object") { if (media.mediaText == "" || (media.mediaText.indexOf("screen") != -1)) { styleSheet = document.styleSheets[i]; } } if (typeof styleSheet != "undefined") { break; } } } if (typeof styleSheet == "undefined") { var styleSheetElement = document.createElement("style"); styleSheetElement.type = "text/css"; document.getElementsByTagName("head")[0].appendChild(styleSheetElement); for (i = 0; i < document.styleSheets.length; i++) { if (document.styleSheets[i].disabled) { continue; } styleSheet = document.styleSheets[i]; } var media = styleSheet.media; mediaType = typeof media; } if (mediaType == "string") { for (i = 0; i < styleSheet.rules.length; i++) { if (styleSheet.rules[i].selectorText.toLowerCase() == selector.toLowerCase()) { styleSheet.rules[i].style.cssText = style; return; } } styleSheet.addRule(selector, style); } else if (mediaType == "object") { for (i = 0; i < styleSheet.cssRules.length; i++) { if (styleSheet.cssRules[i].selectorText.toLowerCase() == selector.toLowerCase()) { styleSheet.cssRules[i].style.cssText = style; return; } } if (hoverstyle != null) { styleSheet.insertRule(selector + "{" + style + "}", 0); styleSheet.insertRule(selector + ":hover{" + hoverstyle + "}", 1); } else { styleSheet.insertRule(selector + "{" + style + "}", 0); } } } createCSSClass(".modalPopup .header", " background-color: " + lightest + ";" + "height: 10%;" + "color: White;" + "line-height: 30px;" + "text-align: center;" + " width: 100%;" + "font-weight: bold; ", null); 

Google बंद होने का उपयोग करना:

आप सिर्फ ccsom मॉड्यूल का उपयोग कर सकते हैं:

 goog.require('goog.cssom'); var css_node = goog.cssom.addCssText('.cssClass { color: #F00; }'); 

JavaScript सिर सीएसएस नोड को दस्तावेज़ सिर में डालते समय क्रॉस ब्राउज़र होने का प्रयास करता है।

खोजकर्ताओं के लाभ के लिए; यदि आप jQuery का उपयोग कर रहे हैं, तो आप निम्न कर सकते हैं:

 var currentOverride = $('#customoverridestyles'); if (currentOverride) { currentOverride.remove(); } $('body').append("<style id=\"customoverridestyles\">body{background-color:pink;}</style>"); 

जाहिर है आप आंतरिक सीएसएस को जो भी आप चाहते हैं, उसे बदल सकते हैं।

कुछ लोगों को शुद्ध जावास्क्रिप्ट की सराहना करते हैं, लेकिन यह काम करता है और गतिशील रूप से लिखने / अधिलेखित शैलियों के लिए बहुत मजबूत रहा है