Rimuovere gli attributi CSS "top" e "left" con jQuery


169

Sto costruendo una mappa trascinabile che quando la mappa viene trascinata all'elemento viene assegnato un attributo 'left' e 'top' con valori per ciascuno così ...

<div class="map" style="top:200px; left:100px;">Map</div>

Ho un pulsante che voglio rimuovere l'attributo superiore e sinistro dallo stile in linea sul div quando si fa clic, è possibile con jquery?


9
Sì. Almeno puoi impostarli su un valore vuoto, che lo rimuove.
Felix Kling,

Possibile duplicato: rimuovere l'attributo CSS utilizzando Jquery . Le risposte potrebbero esserti utili.
Ha disegnato Gaynor il

Nota che ' 'non conta solo come un valore vuoto''
Peter Berg,

3
Per rimuovere solo una proprietà css alla volta: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar

Solo per la cronaca, l'impostazione su vuoto non funziona sempre: "L'impostazione del valore di una proprietà di stile su una stringa vuota ... Tuttavia, non rimuove uno stile che è stato applicato con una regola CSS in un foglio di stile o < stile> elemento ". - vedi stackoverflow.com/questions/27791484/...
Morre

Risposte:


139

I valori predefiniti per CSS tope leftsono auto, quindi impostarli su quello potrebbe essere equivalente a seconda di ciò che stai cercando di fare:

$('.map').css('top', 'auto').css('left', 'auto');

Hai anche la possibilità di rimuovere completamente l' styleattributo:

$('.map').removeAttr('style');

Tuttavia, se si utilizzano altri componenti dell'interfaccia utente jQuery, questi potrebbero richiedere stili incorporati che non si desidera rimuovere, quindi procedere con cautela lì.


61
di solito tali sovrascritture aggiunte all'attributo di stile sono pensate per cambiare il valore dal valore predefinito di css; impostandolo su auto non li ripristina al valore predefinito. significa che auto non è proprio lo stesso, quindi non ha affatto il valore. quindi la risposta corretta sarebbe $ ('map'). css ('top', '');
dsomnus,

15
Questa risposta è sbagliata, non stai rimuovendo gli attributi ma li sostituisci con qualcos'altro. Inoltre, rimuovere l'intero tag di stile non ha molto senso, si potrebbe voler mantenere alcuni attr e rimuoverne altri .. La risposta di wtrevino è quella corretta.
Alex,

Non è un'opzione essenziale, quindi averlo lì è fantastico! :) Per campi come username
Dean Meehan

5
Per la cronaca, la risposta di @ wtrevino dovrebbe essere quella accettata qui. Questa particolare soluzione ha funzionato per me in alcune circostanze, ma rimuoverei questa risposta se potessi. Sfortunatamente, poiché è accettato, non me lo permette.
Rob Hruska,

Questa non è la risposta corretta ... La risposta di @wtrevino è la più corretta. Questa risposta funzionerà solo se vuoi rimuovere tutti gli stili statici dall'elemento ... nella maggior parte dei casi questo non è quello che vuoi fare.
Lars,

427

Se desideri rimuovere in modo specifico gli attributi superiore e sinistro e lasciare altri, puoi farlo:

$('.map').css('top', '').css('left', '');

Oppure, un equivalente più breve:

$('.map').css({
    'top': '',
    'left': ''
});

64
questa è una risposta migliore di quella selezionata.
phirschybar,

Sì. Questa è la risposta giusta. All'inizio non aveva senso, perché sembra che ".css ('top', '')" crea semplicemente una regola 'top' vuota, ma no, la rimuove completamente.
Starkers,

2
Questa è la risposta migliore ancora. Ma penso di averne trovato un altro. Ne ho provati alcuni diversi. .css('left', undefined);non ha cambiato nulla. Passare null non ha fatto nulla. Ma .css('left', false);rimuove quella proprietà.
Viktor,

Come altri hanno suggerito, questa dovrebbe essere considerata la risposta corretta.

1
@Viktor Nota che la documentazione dice esplicitamente di usare una stringa vuota. Mi chiedo se il falso sembra funzionare a causa di una coercizione di tipo non documentata che potrebbe andare via in futuro? api.jquery.com/css
Jeremy Wadhams il

37

Puoi rimuovere tutto il contenuto styledell'attributo facendo:

$('.map').removeAttr('style');

E puoi rimuovere specifici messaggi stylefacendo:

$('.map').css('top', '');
$('.map').css('left', '');

30

Basta impostare la proprietà CSS con una stringa vuota, ad esempio con il seguente codice:

$('#mydiv').css('color', '');

Vedi la documentazione di jQuery su CSS .


3
Non sono sicuro del perché questa non sia la risposta accettata. La risposta effettivamente accettata è caotica perché in realtà non rimuove la proprietà CSS dall'oggetto, che è il titolo della domanda.
Paul Go,

6
  1. Vai qui: API jQuery
  2. Ctrl + F per 'rimuovi'
  3. Leggere:

L'impostazione del valore di una proprietà di stile su una stringa vuota, ad esempio $ ("#mydiv") .css ("color", "") - rimuove quella proprietà da un elemento se è già stata applicata direttamente, sia nello stile HTML attributo, tramite il metodo .css () di jQuery o tramite la manipolazione DOM diretta della proprietà style.

I documenti ti offrono l'approccio attuale e raccomandato per ciò che stai cercando di realizzare, che spesso può farti risparmiare tempo perché non devi leggere avanti e indietro guerre di fiamma su overflow dello stack (non importa quanto divertente / illuminante possa essere !).


5

Secondo questo bug report di JQuery

element.removeAttr ( 'stile')
non funziona in modo coerente nei browser basati su Webkit. Ad esempio, ho riscontrato questo problema su iOS 6.1. La correzione è di usare:
element.attr ('style', '')


2

Se vuoi rimuovere tutto ciò che puoi fare

$('.map').removeAttr('style');

2
$.fn.removeCss=function(prop){
   if(!prop){
          return $(this).removeAttr('style').removeAttr('class');
     }
    else{
         return $(this).css(prop,null);
    }

}

quindi se vuoi rimuovere i css prop:

    $('#mydiv').removeCss('color');
//To remove all prop Css
    $('#mydiv').removeCss();

1

A mio avviso, il modo più pulito è rimuovere completamente la proprietà dalla CSSStyleDeclaration dell'elemento , invece di sovrascriverla con una sorta di valore null / zero / default:

$(".foo").prop("style").removeProperty("top");
$(".foo").prop("style").removeProperty("left");
$(".foo").prop("style").removeProperty("background-color");

0
$.fn.removeCss=function(toDelete){

    var props=$(this).attr('style').split(';');
var tmp=-1;
for( var p=0;p<props.length; p++){if(props[p].indexOf(toDelete)!==-1){tmp=p}};
if(tmp!==-1){

   delete props[tmp];
}

  return $(this).attr('style',props.join(';')+';');

}

Elimina in modo sicuro con questo plugin!

$ ( 'MyDiv') removeCss ( 'colore.');


0

Ci sono alcuni stili che non possono essere rimossi facilmente (mi viene in mente l'overflow)

Una soluzione alternativa sarebbe quella di creare 2 classi diverse e aggiungere / rimuovere quella contenente lo stile desiderato.

NON è la soluzione migliore per le proprietà di stile che possono essere facilmente rimosse / disabilitate.


0

Per rimuovere gli stili CSS, assegnare una stringa vuota allo stile

in questo caso

$('.map').css({top:'',left:''});

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.