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


298

मुझे जावास्क्रिप्ट में सीएसएस स्टाइलशीट क्लास को गतिशील रूप से बनाने और इसे कुछ HTML तत्वों जैसे - div, table, span, tr, आदि और कुछ नियंत्रणों जैसे asp: Textbox, Dropdownlist और datalist में असाइन करने की आवश्यकता है।

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

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



यह भी देखें stackoverflow.com/questions/1212500/...
jantimon

जवाबों:


394

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

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';

10
मेरा उपयोग मामला एक बुकमार्कलेट है जो QA प्रयोजनों के लिए कुछ तत्वों को उजागर कर रहा है।
टॉमजी

25
बहुत यकीन है कि यह IE 8 और उससे कम में एक अज्ञात रनटाइम त्रुटि का परिणाम है।
एंडी ह्यूम

1
मेरे उपयोग का मामला एक यादृच्छिक Google वेब फ़ॉन्ट लोड कर रहा है और फिर यादृच्छिक परिवार को फ़ॉन्ट-परिवार दे रहा है :-)
w00t

26
एक अन्य उपयोग मामला वह होगा जहां आप सीएसएस फाइलों पर निर्भरता के बिना एक एकल जेएस परिवाद चाहते हैं। मेरे मामले में मुझे हल्के ग्रो-स्टाइल अलर्ट पॉपअप आउट-ऑफ-द-बॉक्स चाहिए।
xeolabs

1
मैं w00t जैसा कुछ कर रहा हूं। मैं एक इंटरैक्टिव एचटीएमएल 5 ऐप पर काम कर रहा हूं, जिसमें एक कैनवास पर लेखन होगा, और मैं अपने उपयोगकर्ता को फोंट की एक विस्तृत श्रृंखला से चयन करने देना चाहता हूं। सभी फ़ॉन्ट के साथ एक loooong सीएसएस होने के बजाय, मैं एक बैकएंड बनाने की योजना बना रहा हूं, जहां मैं सिर्फ फ़ॉन्ट डेटा अपलोड करूंगा और जब भी प्रोग्राम लोड होता है, तो एक
वेबसर्विस के

117

एक बेहतर समाधान मिला, जो सभी ब्राउज़रों में काम करता है।
नियमों को जोड़ने या बदलने के लिए 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');

2
IE8 के साथ काम करने की पुष्टि की। अगर मुझे क्रोम में काम नहीं करना था, तो मीडियाटाइप में "styleSheet.cssRules [i] .selectorText &&" और "styleSheet.rules [i]।। परिभाषित नहीं किया गया।
w00t

@ w00t क्या आप इसे काम करने के लिए कोड पेस्ट या संपादित कर सकते हैं?
हेंगजी

मैंने बस क्रोम (संस्करण 34.0.1847.132) को खोला और कार्यों को चिपकाया और इसे निष्पादित किया, लेकिन यह काम नहीं किया: "टाइपError: संपत्ति को 'शून्य की लंबाई' नहीं पढ़ सकता है"। क्या ऐसा हो सकता है कि डेवलपर कंसोल से इसे बनाने का काम न करें?
dnuske

यह क्रोम के कुछ संस्करणों (या क्रोमियम) को अनुक्रमणिका 0. पर डालने की अनुमति नहीं देता है। यहां फिक्स है: styleSheet.insertRule (चयनकर्ता + "{" + शैली + "}", styleSheet.cssRules .length);
dnuske

1
@dnuske मैंने उसी मुद्दे का सामना किया। यह पता चला है कि styleSheet.cssRules शून्य का मूल्यांकन करता है। मेरे द्वारा उपयोग किया गया फिक्स एक नया वैरिएबल बनाने के लिए है var styleSheetLength = styleSheet.cssRules ? styleSheet.cssRules.length : 0और फ़ंक्शन के कार्यान्वयन पर इसके उपयोग को प्रतिस्थापित करता है।
राज नाथानी

27

संक्षिप्त उत्तर, यह "सभी ब्राउज़रों पर संगत" है (विशेष रूप से, 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

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


इसलिए यह हर वर्ग के निर्माण के लिए एक नया "स्टाइल" तत्व बनाता है? इसलिए अगर मुझे डेटा के आधार पर लूप के लिए 1000 + कक्षाएं बनानी थीं, तो इसके लिए 1000 बार document.head.appendChit को लागू करना होगा?
ब्लूजैके

मेरे लिए chrome style.sheet और style.styleSheet में मौजूद नहीं है
ब्लूजैके

17

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

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

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


7

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

// 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);

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


5

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

यह अन्य ब्राउज़रों में काम करता है, सुनिश्चित नहीं है कि कितनी दूर है। लेकिन जब तक आपको 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');
        }
    })
});

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

.myClass { background:#F00; }

5

यहाँ विश्वनाथ के हल को टिप्पणियों के साथ फिर से लिखा गया है:

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;
    }

4

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

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

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

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

जेएसएस पर अधिक जानकारी

एक उदाहरण:

// 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()

3

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

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

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

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


3

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

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

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

.....

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)

1

उत्तर के माध्यम से देखा और सबसे स्पष्ट और सीधे आगे गायब है: 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>

यह तब तक ठीक है जब तक आपको पृष्ठ लोड होने के बाद CSS नियम बनाने की आवश्यकता नहीं है या XHTML का उपयोग कर रहे हैं।
टिम डाउन

1
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);

क्या होगा अगर दस्तावेज़ पर कोई मौजूदा स्टाइलशीट नहीं है
ब्लूजके

1

यहाँ मेरा मॉड्यूलर समाधान है:

var final_style = document.createElement('style');
final_style.type = 'text/css';

function addNewStyle(selector, style){
  final_style.innerHTML += selector + '{ ' + style + ' } \n';
};

function submitNewStyle(){
  document.getElementsByTagName('head')[0].appendChild(final_style);

  final_style = document.createElement('style');
  final_style.type = 'text/css';
};

function submitNewStyleWithMedia(mediaSelector){
  final_style.innerHTML = '@media(' + mediaSelector + '){\n' + final_style.innerHTML + '\n};';
    submitNewStyle();
};

आप मूल रूप से अपने कोड में कहीं भी करते हैं:
addNewStyle('body', 'color: ' + color1);जहां color1परिभाषित चर है।

जब आप वर्तमान सीएसएस फ़ाइल को "पोस्ट" करना चाहते हैं जो आप बस करते हैं submitNewStyle(),
और फिर आप बाद में और भी सीएसएस जोड़ सकते हैं।

यदि आप इसे "मीडिया क्वेरी" के साथ जोड़ना चाहते हैं, तो आपके पास विकल्प है।
"AddNewStyles" के बाद आप बस का उपयोग करें submitNewStyleWithMedia('min-width: 1280px');


यह मेरे उपयोग के मामले के लिए बहुत उपयोगी था, क्योंकि मैं वर्तमान समय के अनुसार सीएसएस को सार्वजनिक (मेरा नहीं) वेबसाइट बदल रहा था। मैं "सक्रिय" स्क्रिप्ट का उपयोग करने से पहले एक सीएसएस फ़ाइल जमा करता हूं, और बाकी बाद में (साइट को थोड़े-थोड़े जैसा दिखता है जैसे तत्वों को एक्सेस करने से पहले करना चाहिए querySelector)।


मैं आज यह कोशिश करने वाला हूं। आपको बताएंगे कि यह मेरे उपयोग के मामले में कैसे काम करता है। उंगलियों को पार कर!!!!
lopezdp

0

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

var currentOverride = $('#customoverridestyles');

if (currentOverride) {
 currentOverride.remove();
}

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

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

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


0

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

function myCSS(data) {
    var head = document.head || document.getElementsByTagName("head")[0];
    if(head) {
        if(data && data.constructor == Object) {
            for(var k in data) {
                var selector = k;
                var rules = data[k];

                var allSheets = document.styleSheets;
                var cur = null;

                var indexOfPossibleRule = null,
                    indexOfSheet = null;
                for(var i = 0; i < allSheets.length; i++) {
                    indexOfPossibleRule = findIndexOfObjPropInArray("selectorText",selector,allSheets[i].cssRules);
                    if(indexOfPossibleRule != null) {
                        indexOfSheet = i;
                        break;
                    }
                }

                var ruleToEdit = null;
                if(indexOfSheet != null) {

                    ruleToEdit = allSheets[indexOfSheet].cssRules[indexOfPossibleRule];

                } else {
                    cur = document.createElement("style");
                    cur.type =  "text/css";
                    head.appendChild(cur);
                    cur.sheet.addRule(selector,"");
                    ruleToEdit = cur.sheet.cssRules[0];
                    console.log("NOPE, but here's a new one:", cur);
                }
                applyCustomCSSruleListToExistingCSSruleList(rules, ruleToEdit, (err) => {
                    if(err) {
                        console.log(err);
                    } else {
                        console.log("successfully added ", rules, " to ", ruleToEdit);
                    }
                });
            }
        } else {
            console.log("provide one paramter as an object containing the cssStyles, like: {\"#myID\":{position:\"absolute\"}, \".myClass\":{background:\"red\"}}, etc...");
        }
    } else {
        console.log("run this after the page loads");
    }

};  

इसके बाद बस इन 2 सहायक कार्यों को उपरोक्त फ़ंक्शन के अंदर, या कहीं और जोड़ें:

function applyCustomCSSruleListToExistingCSSruleList(customRuleList, existingRuleList, cb) {
    var err = null;
    console.log("trying to apply ", customRuleList, " to ", existingRuleList);
    if(customRuleList && customRuleList.constructor == Object && existingRuleList && existingRuleList.constructor == CSSStyleRule) {
        for(var k in customRuleList) {
            existingRuleList["style"][k] = customRuleList[k];
        }

    } else {
        err = ("provide first argument as an object containing the selectors for the keys, and the second argument is the CSSRuleList to modify");
    }
    if(cb) {
        cb(err);
    }
}

function findIndexOfObjPropInArray(objPropKey, objPropValue, arr) {
    var index = null;
    for(var i = 0; i < arr.length; i++) {
        if(arr[i][objPropKey] == objPropValue) {
            index = i;
            break;
        }
    }
    return index;
}

(ध्यान दें कि उन दोनों में मैं .filter के बजाय लूप के लिए उपयोग करता हूं, क्योंकि CSS स्टाइल / रूल लिस्ट की कक्षाओं में केवल एक लंबी संपत्ति होती है, और कोई .filter विधि नहीं होती है।)

फिर इसे कॉल करने के लिए:

myCSS({
    "#coby": {
        position:"absolute",
        color:"blue"
    },
    ".myError": {
        padding:"4px",
        background:"salmon"
    }
})

मुझे बताएं कि क्या यह आपके ब्राउज़र के लिए काम करता है या कोई त्रुटि देता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.