2013-08-04 8 views
6
अगर

मैं इस तरह एक स्टाइलशीट बनाना चाहते हैं बाएं ओर:अमान्य काम के साथ त्रिगुट

var sheet = document.createElement('style'); sheet.type = 'text/css'; 
sheet.innerHTML = data.style; 

लेकिन it seems कि IE अपनी ही वाक्य रचना की जरूरत है। this answer के कोड को आसान बनाने के लिए, मैं

var sheet = document.createElement('style'); sheet.type = 'text/css'; 
(sheet.styleSheet ? sheet.styleSheet.cssText : sheet.innerHTML) = data.style; 

की कोशिश की है लेकिन वह ReferenceError: invalid assignment left-hand side फेंकता है।

फिर

, मैं का उपयोग करना चाहिए ...

var sheet = document.createElement('style'); sheet.type = 'text/css'; 
if(sheet.styleSheet) sheet.styleSheet.cssText = data.style; 
else sheet.innerHTML = data.style; 

... या वहाँ एक आसान विकल्प है?

function setSheetContent(sheet, text) { 
    if(sheet.styleSheet) 
     sheet.styleSheet.cssText = text; 
    else 
     sheet.innerHTML = text; 
} 

var sheet = document.createElement('style'); 
sheet.type = 'text/css'; 
setSheetContent(sheet, data.style); 

या यह लपेट और भी अधिक सुविधा के लिए (यदि आप कभी नहीं किसी मौजूदा चादर की सामग्री बदलना चाहते हैं:

+0

मेरा मानना ​​है कि आप दोनों मूल्यों को स्थापित करने से दूर हो सकते हैं, और जावास्क्रिप्ट की ऑब्जेक्ट सिस्टम अंतर की देखभाल करने के लिए पर्याप्त मजबूत है। – abiessu

+0

@abiessu लेकिन अगर 'sheet.styleSheet'' अपरिभाषित 'है, तो 'sheet.styleSheet.cssText = sheet.innerHTML = data.style' फेंकता है' TypeError: sheet.style शीट अपरिभाषित है। फिर, मुझे यह भी जांचना चाहिए कि मुझे ऑब्जेक्ट 'शीट.स्टाइलशीट' – Oriol

+0

नहीं बनाना चाहिए, मेरा मतलब है कि दो अलग असाइनमेंट लाइनों का उपयोग करना है। उस प्रकार की त्रुटि बहुत अधिक संभावना है क्योंकि 'sheet.stylesheet' आपके उदाहरण में' sheet.styleSheet.cssText' तक पहुंच योग्य मान प्रदान करने के उद्देश्य से मौजूद नहीं है। – abiessu

उत्तर

3

तुम हमेशा कर सकते हैं:

sheet.styleSheet ? sheet.styleSheet.cssText = data.style 
       : sheet.appendChild(document.createTextNode(data.style)); 

FIDDLE

+0

अब यह भी कम पठनीय है ... – Dave

+0

@ डेव - लेकिन यह सवाल का जवाब देता है! – adeneo

+0

ठीक है, मैं 'data.style' को दोहराने से बचना चाहता था, लेकिन मुझे लगता है कि यह सबसे सरल कामकाजी कोड – Oriol

1

यहाँ समाधान है जो भविष्य देखरेख सोच क्या पृथ्वी पर कोड करता नहीं छोड़ देंगे है)

function stylesheetWithContent(sheet, text) { 
    var sheet = document.createElement('style'); 
    sheet.type = 'text/css'; 
    if(sheet.styleSheet) 
     sheet.styleSheet.cssText = text; 
    else 
     sheet.innerHTML = text; 
    return sheet; 
} 

var sheet = stylesheetWithContent(data.style); 
+1

भी एक पंक्ति पर बहुत सारे बयान न डालें। यदि आप तेजी से डाउनलोड के लिए कोड को छोटा करना चाहते हैं, तो वास्तविक खननकर्ता का उपयोग करें (उदाहरण के लिए, Google क्लोजर कंपाइलर का एक ऑनलाइन संस्करण है) – Dave

+0

मैंने केवल 'var sheet = document.createElement (' style ') का उपयोग किया; sheet.type = 'text/css'; 'उसी पंक्ति पर क्योंकि जब मैं HTML लिखता हूं तो मैं उसी पंक्ति पर' <शैली प्रकार = "टेक्स्ट/सीएसएस"> 'का उपयोग करता हूं। – Oriol

+0

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

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