.Css () işleviyle eklenen bir stili nasıl kaldırabilirim?


868

Ben değiştireceğim CSS ile jQuery ve ben girdi değerine dayalı ekliyorum stil kaldırmak istediğiniz:

if(color != '000000') $("body").css("background-color", color); else // remove style ?

Bunu nasıl yapabilirim?
Yukarıdaki çizginin, bir renk seçici kullanılarak bir renk seçildiğinde (yani fare bir renk tekerleğinin üzerine geldiğinde) çalıştığını unutmayın.

2. not: Bunu yapamıyorum css("background-color", "none")çünkü CSS dosyalarından varsayılan stili kaldıracak .
Sadece jQuerybackground-color tarafından eklenen satır içi stilini kaldırmak istiyorum .



fcuntionality dayalı addClass / removeClass daha iyi deneyin. Bu diğer stilleri etkilemez.
Prabhakaran

Yanıtlar:


1333

Özelliğin boş bir dizeye değiştirilmesi, işi yapıyor gibi görünüyor:

$.css("background-color", "");

4
@baacke Sözde "standart" çok eskimiş ve çok fazla geliştirme süresi harcadığında bir utanç. Eski yazılımları kullanmayı tercih eden şirketler için çok az sempati duyuyorum, neden onlar için geliştirmek için fazladan zaman harcamam gerektiğini anlamıyorum.
andrewb

33
Burada @baacke ile yan yana olmalıyım. Müşterimiz hala resmi bir minimum IE6 gereksinimi (!!) vardır. Sorun şu ki, müşterileri daha az gelişmiş ülkeler de dahil olmak üzere tüm dünyada. "Müşterinin müşterileri" müşterimizle iş yapmak için çok eski bilgisayarlar kullanıyor olabilir . Bu yüzden eski tarayıcı en azından minimal olarak desteklenmeli ya da iş kaybetme riski var ...
user1429080

8
Bir müşteri için geliştirdiğiniz çözümlerin gereksinimlerini belirleyemezsiniz. Bu istemci daha eski bir tarayıcı için destek isterse veya desteğe ihtiyaç duyarsa, bunu sağlamak sizin görevinizdir. Siz "kimin umurunda" olduğundan bahsediyorsunuz, gerçek mühendislere kötü bir isim verin.
Ed DeGagne

5
@EdDeGagne - IE'nin eski sürümlerini desteklemeyi sürekli durdurmanız gerekir. Bu, kod tabanınızı geliştirir ve ziyaretçileri eski bir IE kullanmamaya motive eder. Tek zor şey, ne zaman destek bırakabileceğinizi bulmaktır. Google'ın web siteleri, çok sayıda ziyaretçiye sahip, eski bir IE'yi bırakmaya karar verdiyse, bunun iyi bir karar olduğuna güvenebilirsiniz. Bir şirket, kullanıcılarına, her eski IE kullanıcısını modern bir bilgisayar satın almak için daha fazla ödeme yaptıklarını (IE tam olarak ne sunduklarını) korumaktan çok daha ileri gitti.
janko-m

5
Windows 7'de bile IE8 hala standart, gördüğümde okumayı bıraktım
Kapsül

544

Kabul edilen cevap çalışıyor ancak styletestlerimde DOM'da boş bir özellik bırakıyor . Önemli değil, ama bu her şeyi kaldırıyor:

removeAttr( 'style' );

Bu, tüm dinamik stilleri kaldırmak ve stil sayfası stiline geri dönmek istediğinizi varsayar.


Bu güzel bir fikir ama jQuery buggy, gönderilen hataya bakın: bugs.jquery.com/ticket/9500
Tosh

4
@ Bu hata giderildi 25.08.2011: bugs.jquery.com/…
ThinkingStiff

Biliyorum ama en azından 1.7 sürümünde hala buggy, 1.8 test etmedim
Tosh

7
Bu, stil özelliğindeki diğer tüm özellikleri de kaldıracaktır. Bu yüzden akıllıca seçin.
kodlama ritmi

1
Bu akıllıca! kabul edilen cevap, jquery tarafından yapılan satır içi stilin css stillerinin üzerine yazılması gereken durumlarda işe yaramaz, ancak bu yöntem tüm durumlarda iyi çalışır.
Farzad YZ

170

JQuery kullanarak bir CSS özelliğini kaldırmanın birkaç yolu vardır:

1. CSS özelliğinin varsayılan (başlangıç) değerine ayarlanması

.css("background-color", "transparent")

MDN'deki CSS özelliği için başlangıç ​​değerine bakın . Burada varsayılan değer şudur transparent. inheritÖzelliği üst öğesinden devralmak için birkaç CSS özelliği için de kullanabilirsiniz . CSS3 / CSS4, ayrıca kullanabilir initial, revertya da unsetancak bu anahtar kelimeler sınırlı tarayıcı desteğine sahip olabilir.

2. CSS özelliğinin kaldırılması

Boş bir dize, CSS özelliğini kaldırır;

.css("background-color","")

Ancak, jQuery .css () belgelerinde belirtildiği gibi , bu özelliği kaldırır, ancak arka plan da dahil olmak üzere belirli CSS kısayol özellikleri için IE8 ile uyumluluk sorunları vardır .

Bir stil özelliğinin değerini boş bir dizeye ayarlamak - ör. $ ('# Mydiv'). Css ('color', '') - HTML stilinde olsun, önceden uygulanmışsa bu özelliği bir öğeden kaldırır özniteliği, jQuery'nin .css () yöntemiyle veya style özelliğinin doğrudan DOM işlemi aracılığıyla. Ancak, bir stil sayfasında veya öğesinde CSS kuralı ile uygulanan bir stili kaldırmaz. Uyarı: Dikkate değer bir istisna, IE 8 ve altı için kenarlık veya arka plan gibi steno özelliklerin kaldırılmasının, stil sayfasında veya öğesinde ayarlanandan bağımsız olarak bu stili tamamen öğeden kaldıracağıdır .

3. elemanın tüm tarzı Çıkarma

.removeAttr("style")

49

Sadece saf JavaScript'in yolunu bilmenizi sağlamak için saf JavaScript ile bir stil niteliğini kaldırmanın yolunu buldum

var bodyStyle = document.body.style;
if (bodyStyle.removeAttribute)
    bodyStyle.removeAttribute('background-color');
else        
    bodyStyle.removeProperty('background-color');

11
Adam zaten jQuery kullanıyor ... neden çapraz tarayıcı yöntemini yeniden uygulamak için rahatsız!?!?
billy

32
çünkü jquery her şey değildir, çünkü o ya da belki de her birimiz geliştiriciler olarak uyumluluğun ne anlama geldiğini ve JavaScript gibi temel dillerle böyle bir şeyin nasıl yapılacağını bilmesi gerektiğini söylemeliyim, belki de bu benim teorim zaten kendi çerçevemi yarattım benim temel JavaScript bilgimden ben kendi kavram ve düşünme tarzım var başkalarını kullanmayı reddediyor :) ve bu arada senin (-) için teşekkürler sadece katma değer olması gerekiyordu :) ve ayrıca bu arada adam Alex adında bir adam değil
Marwan

1
Sadece document.all'i kullanmıyorsanız kontrol etmemeniz gerektiğini belirtmek isterim. Belki de şöyle kontrol edersiniz: if (elm.style.removeProperty) {elm.style.removeProperty (propertyName); } else if (elm.style.removeAttribute) {elm.style.removeAttribute (attributeName); }
Richard

Peki haklısın (navigator.appName == "Microsoft Internet Explorer") document.body.style.removeAttribute ('arka plan rengi'); else document.body.style.removeProperty ('arka plan rengi'); ve diğer yandan çözümünüz de doğru :) notunuz için teşekkürler
Marwan

9
Hayır, tarayıcıyı kontrol etmek yerine bu işlevin var olup olmadığını kesinlikle kontrol etmelisiniz. MS, IE'nin bir sonraki sürümünde işlev adını değiştirmeye karar verirse ne olur? Sonra gidip IE sürümünü kontrol ediyor musunuz?
j03w


19

bu jQuery işlevlerinden herhangi birinin çalışması gerekir:

$("#element").removeAttr("style");
$("#element").removeAttr("background-color") 

22
Sadece bir css mülkünü kaldırmak için:var cssObject = $('selector').prop('style'); cssObject.removeProperty('background-color');
ilgaar

igaar - çözümünüz en iyisi. Ben gitmek zorunda diğer özellikleri ile "display: none" vardı tablo hücreleri yığını için bir '.each' döngü koymak. Kusursuz bir şekilde çalıştı, sadece ekranı kaldırarak: hiçbiri ve geri kalanını terk etti.
Rob Von Nesselrode

9

Sadece şunu kullanarak:

$('.tag-class').removeAttr('style');

veya

$('#tag-id').removeAttr('style');

Bu, yalnızca renk değil, satır içi eklenen diğer stilleri de kaldıracaktır.
LongInt

7

Nasıl bir şey hakkında:

var myCss = $(element).attr('css');
myCss = myCss.replace('background-color: '+$(element).css('background-color')+';', '');
if(myCss == '') {
  $(element).removeAttr('css');
} else {
  $(element).attr('css', myCss);
}

Bunu beğendim! Belirtilen özelliği kaldırırsınız ve başka hiçbir şeyi kaldırmazsınız.
Joel

7

Eklentimi kullan:

$.fn.removeCss=function(all){
        if(all===true){
            $(this).removeAttr('class');
        }
        return $(this).removeAttr('style')
    }

Durumunuz için aşağıdaki gibi kullanın:

$(<mySelector>).removeCss();

veya

$(<mySelector>).removeCss(false);

sınıflarında tanımlanan CSS'yi de kaldırmak istiyorsanız:

$(<mySelector>).removeCss(true);

$(this).removeAttrgereksizdir ve this.removeAttryeterli olmalıdır.
Emile Bergeron

removeAttr Ayrıca classattr kaldırır mı ? Ben öyle düşünmüyorum
Abdennour TOUMI

Zaten bir jQuery öğesi olan removeAttreklentinizin içinden bahsediyorum this. $(this)gereksizdir.
Emile Bergeron

2
AH! Tamam tamam .. @EmileBergeron, eski jquery , jQuery öğesine eşlenmiş örnek thisolarak sağlar HTMLElement... Gördüğünüz gibi, cevabım eski ... bu yüzden .. neyse, neden bunu değiştirdiklerini söyleyebilirim, bunu yaparlar çünkü ES6'da yeni gelen ok fonksiyonu. .. ve thisişe yaramaz hale geldi ve yerini aldıevent.currentTarget
Abdennour TOUMI

1
Yeterince adil! ;) JS dünyasında 3 yaşında komik.
Emile Bergeron

7

Bunu dene:

$('#divID').css({"background":"none"});// remove existing

$('#divID').css({"background":"#bada55"});// add new color here.

Teşekkürler


"Mevcut olanı kaldır" ile ilgili tek sorun, bir küme varsa stil sayfası arka planını da geçersiz kılmasıdır.
Jtbs

6

CSS stilini kullanıyorsanız şunları kullanabilirsiniz:

$("#element").css("background-color","none"); 

ve ardından aşağıdakilerle değiştirin:

$("#element").css("background-color", color);

CSS stilini kullanmıyorsanız ve HTML öğesinde özelliğiniz varsa şunları kullanabilirsiniz:

$("#element").attr("style.background-color",color);

6

2018

bunun için yerel API var

element.style.removeProperty(propery)


2

Neden bir CSS sınıfını kaldırmak istediğiniz stili oluşturmuyorsunuz? Şimdi kullanabilirsiniz: .removeClass(). Bu ayrıca aşağıdakileri kullanma olasılığını da açar:.toggleClass()

(varsa sınıfı kaldırın ve yoksa ekleyin.)

Sınıf eklemek / kaldırmak, mizanpaj sorunları ile uğraşırken değiştirmek / sorun gidermek için daha az kafa karıştırıcıdır (belirli bir stilin neden kaybolduğunu anlamaya çalışmak yerine).


2
let el = document.querySelector(element)
let styles = el.getAttribute('style')

el.setAttribute('style', styles.replace('width: 100%', ''))

1

Bu, diğer bazı çözümlerden daha karmaşıktır, ancak senaryolarda daha fazla esneklik sunabilir:

1) Seçerek uygulamak / kaldırmak istediğiniz stili izole etmek (kapsüllemek) için bir sınıf tanımı yapın. Boş olabilir (ve bu durumda muhtemelen olması gerekir):

.myColor {}

2) dayalı bu kodu kullanabilirsiniz http://jsfiddle.net/kdp5V/167/ gelen bu cevap ile gilly3 :

function changeCSSRule(styleSelector,property,value) {
    for (var ssIdx = 0; ssIdx < document.styleSheets.length; ssIdx++) {
        var ss = document.styleSheets[ssIdx];
        var rules = ss.cssRules || ss.rules;
        if(rules){
            for (var ruleIdx = 0; ruleIdx < rules.length; ruleIdx++) {
                var rule = rules[ruleIdx];
                if (rule.selectorText == styleSelector) {
                    if(typeof value == 'undefined' || !value){
                        rule.style.removeProperty(property);
                    } else {
                        rule.style.setProperty(property,value);
                    }
                    return; // stops at FIRST occurrence of this styleSelector
                }
            }
        }
    }
}

Kullanım örneği: http://jsfiddle.net/qvkwhtow/

Uyarılar:

  • Kapsamlı olarak test edilmemiştir.
  • Önemli veya diğer yönergeleri yeni değere dahil edemezsiniz . Bu tür mevcut direktifler bu manipülasyon sayesinde kaybedilecektir.
  • Yalnızca bir styleSelector öğesinin ilk bulunuşunu değiştirir. Tüm stilleri eklemez veya kaldırmaz, ancak bu daha ayrıntılı bir şeyle yapılabilir.
  • Geçersiz / kullanılamaz değerler dikkate alınmaz veya hata verir.
  • Chrome'da (en azından), yerel olmayan (siteler arası gibi) CSS kuralları document.styleSheets nesnesi aracılığıyla gösterilmez, bu nedenle bunlar üzerinde çalışmaz. Bu kodun "ilk bulunan" davranışını göz önünde bulundurarak, bir yerel geçersiz kılmaları eklemek ve değiştirmek gerekir.
  • document.styleSheets genel olarak manipülasyona uygun değildir, bunun agresif kullanım için çalışmasını beklemeyin.

Stili bu şekilde izole etmek, manipüle etmese bile CSS'nin temelini oluşturur. CSS kurallarını değiştirmek jQuery'nin tümüyle ilgili DEĞİLDİR, jQuery DOM öğelerini manipüle eder ve bunu yapmak için CSS seçicileri kullanır.


1

Basit web geliştirme ucuzdur. Belirli bir stili kaldırırken boş dize kullanmanızı öneririm

$(element).style.attr = '  ';

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.