2012-08-06 15 views
16

मैं एक सीएमएस के साथ काम कर रहा हूं जो हमें मुख्य अनुभाग संपादित करने से रोकता है। मुझे टैग के ठीक बाद साइट पर सीएसएस स्टाइलशीट जोड़ने की जरूरत है। क्या जेएस के साथ ऐसा करने का कोई तरीका है, जहां मैं पृष्ठ के निचले हिस्से में एक स्क्रिप्ट जोड़ सकता हूं (मुझे टैग से ठीक पहले स्क्रिप्ट जोड़ने की सुविधा है) जो तब स्टाइलशीट को हेड सेक्शन में इंजेक्ट करेगा?शरीर में जावास्क्रिप्ट का उपयोग करके हेड में स्टाइलशीट जोड़ें

+2

सचमुच कुछ सवाल नीचे: http://stackoverflow.com/questions/11833325/css-hack-adding-css-in-the-body -ऑफ-ए-वेबसाइट – Kwon

+2

आप किस सीएमएस का उपयोग कर रहे हैं? आमतौर पर –

+0

इनलाइन या बाहरी स्टाइलशीट को शामिल करने के लिए कम से कम कुछ तरीका प्रदान किया जाता है? –

उत्तर

52

अद्यतन: specs के अनुसार, link तत्व शरीर में अनुमति नहीं है। हालांकि, अधिकांश ब्राउज़र अभी भी इसे ठीक से प्रस्तुत करेंगे। इसलिए, टिप्पणियों में सवालों के जवाब देने के लिए - वास्तव में link को पृष्ठ के head में body नहीं जोड़ना होगा।

function addCss(fileName) { 

    var head = document.head; 
    var link = document.createElement("link"); 

    link.type = "text/css"; 
    link.rel = "stylesheet"; 
    link.href = fileName; 

    head.appendChild(link); 
} 

addCss('{my-url}'); 

या jQuery के साथ एक छोटा सा आसान

function addCss(fileName) { 
    var link = $("<link />",{ 
    rel: "stylesheet", 
    type: "text/css", 
    href: fileName 
    }) 
    $('head').append(link); 
} 

addCss("{my-url}"); 

मूल जवाब:

आप जरूरी सिर में जोड़ने के लिए, बस में जोड़ने की जरूरत नहीं है बॉडी टैग का अंत

$('body').append('<link rel="stylesheet" type="text/css" href="{url}">') 

के रूप में जुआन मेंडेस उल्लेख किया है, आप (ऊपर कोड देखें)

+3

आप लगभग उसी चीज का उपयोग सिर पर जोड़ने के लिए कर सकते हैं। –

+0

@ जुआन मेंडेस, मुझे पता है, लेकिन मैं जो कह रहा हूं वह यह है कि इसे शरीर में – vittore

+0

हाय विटोर में डाला जा सकता है, मैंने दूसरी स्क्रिप्ट को जोड़ा है जिसे आपने टैग से पहले सही बताया है, हालांकि, ऐसा प्रतीत नहीं होता है सीएसएस को मुख्य खंड के भीतर लोड करें ... विचार? मुख्य समस्या यह है कि हम स्टाइलशीट को ओवरराइट करने के लिए एक नई स्टाइलशीट बना रहे हैं जिसे सीएमएस हमें उपयोग करने के लिए मजबूर करता है। इसलिए हमने उनकी सेटिंग्स को ओवरराइट करने के लिए एक नई स्टाइलशीट बनाई। हम इसे लोड करने के बाद अधिकार लोड करने की तरह जोर देते हैं ... अन्यथा, उनकी स्टाइलशीट लोड होती है, और साइट दिखाती है, और फिर कुछ सेकंड बाद, हमारे परिवर्तन दिखाते हैं ... –

12

यह वही है आप एक बुद्धिमान में चाहते हो जाएगा सिर बजाय

$('head').append('<link rel="stylesheet" type="text/css" href="{url}">') 

और एक ही jQuery के बिना करने के लिए स्टाइलशीट सम्मिलित कर सकते हैं मार्ग। शुद्ध जेएस का भी उपयोग करें।

function loadStyle(href, callback){ 
    // avoid duplicates 
    for(var i = 0; i < document.styleSheets.length; i++){ 
     if(document.styleSheets[i].href == href){ 
      return; 
     } 
    } 
    var head = document.getElementsByTagName('head')[0]; 
    var link = document.createElement('link'); 
    link.rel = 'stylesheet'; 
    link.type = 'text/css'; 
    link.href = href; 
    if (callback) { link.onload = function() { callback() } } 
    head.appendChild(link); 
} 
+2

मैंने लूप के लिए लापता 'i' जोड़ने के लिए संपादित किया है:' if (document.styleSheets [i] .href == href) {' – cronoklee

+0

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

+0

पर लिंक जोड़ने की अनुशंसा नहीं करता हूं समाधान जेएस के माध्यम से प्रतिपादन को नियंत्रित करने के लिए भी है। पहले सीएसएस लोड करने की तरह, लोड के लिए इसका उपयोग कभी भी किया जाता है। आप कॉलबैक तर्क जोड़ सकते हैं और फ़ंक्शन के अंदर एक ऑनलोड ईवेंट डाल सकते हैं। यह आपको बताएगा कि यह कब उपयोग करने के लिए तैयार है। फ्रेम, स्क्रिप्ट, ect जैसे अन्य तत्वों के लिए भी चला जाता है। – Eddie

4

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

function toggleStylesheet(href, onoff){ 
    var existingNode=0 //get existing stylesheet node if it already exists: 
    for(var i = 0; i < document.styleSheets.length; i++){ 
     if(document.styleSheets[i].href && document.styleSheets[i].href.indexOf(href)>-1) existingNode = document.styleSheets[i].ownerNode 
    } 
    if(onoff == undefined) onoff = !existingNode //toggle on or off if undefined 
    if(onoff){ //TURN ON: 
     if(existingNode) return onoff //already exists so cancel now 
     var link = document.createElement('link'); 
     link.rel = 'stylesheet'; 
     link.type = 'text/css'; 
     link.href = href; 
     document.getElementsByTagName('head')[0].appendChild(link); 
    }else{ //TURN OFF: 
     if(existingNode) existingNode.parentNode.removeChild(existingNode) 
    } 
    return onoff 
} 

नमूना उपयोग:

toggleStylesheet('myStyle.css') //toggle myStyle.css on or off 

toggleStylesheet('myStyle.css',1) //add myStyle.css 

toggleStylesheet('myStyle.css',0) //remove myStyle.css 
+2

स्टाइलशीट पर मानक '' .disabled'' प्रॉपर्टी का उपयोग करने के बारे में –

+0

चालू/बंद करने के लिए स्पष्ट रूप से यह एक विकल्प है और दूसरी बार चालू करने के लिए थोड़ा तेज़ होगा, लेकिन इसे फ़ंक्शन में तीसरे मामले की आवश्यकता होगी एक अक्षम राज्य में पहले से मौजूद स्टाइलशीट को संभालने के लिए, तो फ़ंक्शन थोड़ा लंबा होगा। – cronoklee

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