एक jQuery प्लगइन एक इनलाइन शैली ( display:block) लागू कर रहा है । मैं आलसी महसूस कर रहा हूं और इसके साथ ओवरराइड करना चाहता हूं display:none।
सबसे अच्छा (आलसी) तरीका क्या है?
एक jQuery प्लगइन एक इनलाइन शैली ( display:block) लागू कर रहा है । मैं आलसी महसूस कर रहा हूं और इसके साथ ओवरराइड करना चाहता हूं display:none।
सबसे अच्छा (आलसी) तरीका क्या है?
जवाबों:
अद्यतन: जबकि निम्न समाधान काम करता है, एक बहुत आसान तरीका है। निचे देखो।
यहाँ मैं क्या लेकर आया हूँ, और मुझे आशा है कि यह काम आएगा - आपके या किसी और के लिए:
$('#element').attr('style', function(i, style)
{
return style && style.replace(/display[^;]+;?/g, '');
});
यह उस इनलाइन शैली को हटा देगा।
मुझे यकीन नहीं है कि यह वही है जो आप चाहते थे। आप इसे ओवरराइड करना चाहते थे, जैसा कि पहले ही बताया गया है, आसानी से किया जाता है $('#element').css('display', 'inline')।
मैं जिस चीज की तलाश कर रहा था, वह पूरी तरह से इनलाइन शैली को हटाने के लिए एक समाधान था। मुझे एक प्लगइन की आवश्यकता है जो मैं लिख रहा हूं जहां मुझे अस्थायी रूप से कुछ इनलाइन सीएसएस मूल्यों को सेट करना है, लेकिन बाद में उन्हें हटाना चाहते हैं; मैं स्टाइलशीट को वापस नियंत्रण में लेना चाहता हूं। मैं इसके सभी मूल मूल्यों को संग्रहीत करके और फिर उन्हें इनलाइन पर वापस रख सकता हूं, लेकिन यह समाधान मुझे बहुत साफ लगता है।
यहाँ यह प्लगइन प्रारूप में है:
(function($)
{
$.fn.removeStyle = function(style)
{
var search = new RegExp(style + '[^;]+;?', 'g');
return this.each(function()
{
$(this).attr('style', function(i, style)
{
return style && style.replace(search, '');
});
});
};
}(jQuery));
यदि आप अपनी स्क्रिप्ट से पहले पृष्ठ में इस प्लगइन को शामिल करते हैं, तो आप बस कॉल कर सकते हैं
$('#element').removeStyle('display');
और वह चाल चलनी चाहिए।
अद्यतन : मुझे अब एहसास हुआ कि यह सब व्यर्थ है। आप बस इसे खाली करने के लिए सेट कर सकते हैं:
$('#element').css('display', '');
और यह स्वचालित रूप से आपके लिए निकाल दिया जाएगा।
यहाँ डॉक्स से एक उद्धरण है :
स्टाइल प्रॉपर्टी की वैल्यू को एक खाली स्ट्रिंग में सेट करना - जैसे
$('#mydiv').css('color', '')- उस प्रॉपर्टी को उस एलिमेंट से हटा देता है अगर वह पहले से ही सीधे लागू हो चुका है, चाहे वह HTML स्टाइल एट्रीब्यूट में हो, jQuery की.css()विधि से, या स्टाइल प्रॉपर्टी के डायरेक्ट DOM मैनिपुलेशन के माध्यम से। हालांकि, यह एक शैली को नहीं हटाता है जिसे स्टाइलशीट या<style>तत्व में CSS नियम के साथ लागू किया गया है ।
मुझे नहीं लगता कि jQuery यहां कोई जादू कर रहा है; ऐसा लगता है कि styleवस्तु मूल रूप से ऐसा करती है ।
.css('property')आपको मूल्य देता है, लेकिन यह आपको नहीं बताता है कि यह इनलाइन शैली से आया है)।
styleवस्तु एक ही तरीके से व्यवहार करने लगती है। मैंने इस जानकारी के साथ अपने जवाब में संशोधन किया।
$('#element').css('display', '')?
.removeAttr("style") पूरी शैली के टैग से छुटकारा पाने के लिए ...
.attr("style") मान का परीक्षण करें और देखें कि क्या कोई इनलाइन शैली मौजूद है ...
.attr("style",newValue) कुछ और करने के लिए इसे सेट करने के लिए
display।
styleविशेषता नहीं निकलती है, फिर भी यह ध्यान देने योग्य है।
इनलाइन शैलियों को हटाने का सबसे आसान तरीका (jQuery द्वारा उत्पन्न) होगा:
$(this).attr("style", "");
इनलाइन कोड गायब हो जाना चाहिए और आपकी वस्तु आपके सीएसएस फाइलों में पूर्वनिर्धारित शैली को अनुकूलित करना चाहिए।
मेरे लिए काम किया!
आप jQuery की cssविधि का उपयोग करके शैली सेट कर सकते हैं :
$('something:visible').css('display', 'none');
<div style="display:block;">, $('div').hide()।
hideइनलाइन शैलियों को संशोधित करने के एक विशेष मामले को संबोधित करता है। यह उत्तर सभी मामलों को संबोधित करता है। ( hide/showयह भी एक सीमा है कि दो के रूप में दो मूल्यों को टॉगल किया जाता है। यानी कोई नहीं-> ब्लॉक या कोई नहीं- इनलाइन।)
hide/ showके पुराने मूल्य को याद रखेगा displayऔर उसे सही ढंग से पुनर्स्थापित करेगा।
आप इस तरह एक jQuery प्लगइन बना सकते हैं:
jQuery.fn.removeInlineCss = (function(){
var rootStyle = document.documentElement.style;
var remover =
rootStyle.removeProperty // modern browser
|| rootStyle.removeAttribute // old browser (ie 6-8)
return function removeInlineCss(properties){
if(properties == null)
return this.removeAttr('style');
proporties = properties.split(/\s+/);
return this.each(function(){
for(var i = 0 ; i < proporties.length ; i++)
remover.call(this.style, proporties[i]);
});
};
})();
प्रयोग
$(".foo").removeInlineCss(); //remove all inline styles
$(".foo").removeInlineCss("display"); //remove one inline style
$(".foo").removeInlineCss("color font-size font-weight"); //remove several inline styles
elem.style.removeProperty('margin-left')केवल विशेषता margin-leftसे हटा देगा style(और उस संपत्ति के मूल्य को वापस करेगा)। IE6-8 के लिए elem.style.removeAttribute()।
आलसी तरीका (जो भविष्य के डिजाइनरों को आपके नाम का अभिशाप देगा और आपकी नींद में हत्या कर देगा):
#myelement
{
display: none !important;
}
अस्वीकरण: मैं इस दृष्टिकोण की वकालत नहीं करता, लेकिन यह निश्चित रूप से आलसी तरीका है।
$('div[style*=block]').removeAttr('style');
$("[style*=block]").hide();
यदि आप किसी शैली विशेषता के भीतर कोई गुण निकालना चाहते हैं - तो इसे किसी और चीज़ पर सेट न करें - आप removeProperty()विधि का उपयोग करते हैं :
document.getElementById('element').style.removeProperty('display');
अद्यतन:
मैंने विभिन्न तरीकों और उनके परिणामों के साथ खेलने के लिए एक इंटरैक्टिव फिडेल बनाया है । जाहिर है set to empty string, set to faux valueऔर , के बीच बहुत अंतर नहीं है removeProperty()। वे सभी एक ही नतीजे पर आते हैं - जो या तो पूर्व-दिए गए सीएसएस नियम या ब्राउज़र का डिफ़ॉल्ट मान है।
यदि आपकी शैली से प्रदर्शन एकमात्र पैरामीटर है, तो आप सभी शैली को हटाने के लिए इस आदेश को चला सकते हैं:
$('#element').attr('style','');
इसका मतलब है कि यदि आपका तत्व पहले इस तरह दिखता था:
<input id="element" style="display: block;">
अब आपका तत्व इस तरह दिखाई देगा:
<input id="element" style="">
यहाँ एक इनलाइन सेलेक्टर फ़िल्टर है जिसे मैंने लिखा था कि प्लग इन jQuery।
$("div:inlineStyle(display:block)") // will select all divs with an inline style of display: block set
आपके मामले में आप इस तरह का उपयोग कर सकते हैं:
$("div:inlineStyle(display:block)").hide();
अब शैली लागू करने के लिए प्लगइन बदलें। यह शैली को वहां से हटाने के बाद बहुत बेहतर होगा।
$el.css({
height : '',
'margin-top' : ''
});
आदि...
बस दूसरा परम खाली छोड़ दो!
"jQuery plugin is applying an inline style (display:block). I'm feeling lazy and want to override it with display:none"। हालाँकि आपका पाठ सही है, आपका कोड प्रश्न को हल नहीं करता है।
मेरे पास चौड़ाई संपत्ति के साथ ऐसा ही मुद्दा था। मैं कोड से महत्वपूर्ण को हटा नहीं सका, और चूंकि इस शैली को एक नए टेम्पलेट पर मेरी आवश्यकता थी, इसलिए मैंने एक आईडी (modalstyling) को तत्व में जोड़ा और बाद में मैंने निम्नलिखित कोड को टेम्पलेट में जोड़ा:
<script type="text/javascript">
$('#modalstyling').css('width', ''); //Removal of width !important
$('#modalstyling').width('75%'); //Set custom width
</script>