Видаліть атрибути "верхній" та "лівий" CSS за допомогою jQuery


169

Я будую карту, що перетягується, що при перетягуванні карти елементу надається атрибут 'ліворуч' та 'верх' зі значеннями для кожного так ...

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

У мене є кнопка, якою я хочу видалити верхній і лівий атрибут зі стилю вбудованого тексту на діві при натисканні. Це можливо за допомогою jquery?


9
Так. Принаймні, ви можете встановити їх у порожнє значення, яке видаляє його.
Фелікс Клінг

Можливий дублікат: Видаліть атрибут CSS за допомогою Jquery . Відповіді там можуть бути вам корисними.
Дрю Гейнор

Зауважте, що ' 'це не вважається лише порожнім значенням''
Peter Berg

3
Щоб видалити лише одну властивість css за один раз: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar

Тільки для запису встановлення порожнього не завжди працює: "Встановлення значення властивості стилю в порожній рядок ... Однак воно не видаляє стиль, застосований із правилом CSS у таблиці стилів або < стиль> елемент. " - см stackoverflow.com/questions/27791484 / ...
Morre

Відповіді:


139

Значення за замовчуванням для CSS topі leftє auto, таким чином встановлюючи їх , що може бути еквівалентно в залежності від того, що ви намагаєтеся зробити:

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

Також у вас є можливість повністю видалити styleатрибут:

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

Однак якщо ви використовуєте інші компоненти інтерфейсу jQuery, для них можуть знадобитися стилі вбудовування, які ви не хочете видаляти, тому продовжуйте з обережністю.


61
зазвичай такі перезаписи, що додаються до атрибуту стилю, призначені для зміни значення відключеного від значення css за замовчуванням; встановлення цього параметра автоматично не повертає їх до значення за замовчуванням. тобто auto насправді не є таким самим, то не має значення взагалі. тому правильною відповіддю буде $ ('map'). css ('top', '');
dsomnus

15
Ця відповідь неправильна, ви не видаляєте атрибути, а заміняєте їх чимось іншим. Крім того, видалення цілого тегу стилю не має особливого сенсу, можна захотіти зберегти деякі атрибути та видалити інші .. Відповідь wtrevino правильна.
Алекс

Це не суттєвий варіант, тому мати його там чудово! :) Для таких полів, як ім’я користувача
Dean Meehan

5
Для запису відповідь @ wtrevino повинна бути прийнятою тут. Це конкретне рішення працювало для мене за певних обставин, але я би усунув цю відповідь, якщо зможу. На жаль, оскільки він прийнятий, він мені не дозволить.
Роб Грушка

Це не правильна відповідь ... Відповідь @wtrevino є найбільш правильною. Ця відповідь спрацює лише в тому випадку, якщо ви хочете видалити всі статичні стилі з елемента ... у більшості випадків це не те, що ви хочете робити.
Ларс

427

Якщо ви хочете спеціально видалити верхній і лівий атрибути та залишити інші, ви можете зробити це:

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

Або коротший еквівалент:

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

64
це краща відповідь, ніж обрана.
фіршибар

Так. Це слушна відповідь. Спочатку це не мало сенсу, тому що це виглядає як ".css ('top', '')" просто створює порожнє правило "top", але ні, він видаляє його повністю.
Старкерс

2
Це найкраща відповідь поки. Але я думаю, що знайшов ще один. Я спробував кілька різних. .css('left', undefined);нічого не змінили. Перехід нуля теж нічого не робив. Але .css('left', false);це властивість вилучає.
Віктор

Як підказали інші, це слід вважати правильними відповідями.

1
@Viktor Зауважте, що в документації прямо написано використання порожнього рядка. Цікаво, чи трапляється помилка через деякий примус незадокументованого типу, який може піти в майбутньому? api.jquery.com/css
Джеремі Вадхамс

37

Ви можете видалити весь вміст styleатрибута, виконавши:

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

А ви можете видалити конкретні styles, виконавши:

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

30

Просто встановіть властивість CSS порожнім рядком, наприклад із наступним кодом:

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

Див. Документацію jQuery на CSS .


3
Не впевнений, чому це не прийнята відповідь. Фактично прийнята відповідь хитра, оскільки вона фактично не видаляє властивість CSS з об’єкта, що є назвою питання.
Пол Іди

6
  1. Перейдіть сюди: jQuery API
  2. Ctrl + F для "видалити"
  3. Прочитайте:

Встановлення значення властивості стилю в порожній рядок - наприклад, $ ("#mydiv") .css ("color", "") - видаляє це властивість з елемента, якщо воно вже було безпосередньо застосовано, будь то в стилі HTML атрибут, через метод .Qss () jQuery's, або через пряме DOM-маніпулювання властивістю стилю.

Документи дають вам сучасний, рекомендований підхід до того, що ви намагаєтеся досягти, що часто може заощадити ваш час, оскільки вам не доведеться читати полум'яні війни при переповненні стека (незалежно від того, якою веселою та просвічуючою це може бути справа). !).


5

Відповідно до цього звіту про помилки JQuery

element.removeAttr ('стиль')
не працює послідовно у веб-браузерах. Наприклад, я зіткнувся з цією проблемою на iOS 6.1. Виправлення полягає у використанні:
element.attr ('стиль', '')


2

Якщо ви хочете видалити все, що ви можете зробити

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

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

}

тоді, якщо ви хочете видалити css prop (s):

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

1

На мою думку, найчистіший спосіб - повністю видалити властивість з CSSStyleDeclaration елемента , а не просто переписати його з якимось значенням 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(';')+';');

}

Видаліть безпечно цей плагін!

$ ('myDiv'). removeCss ('color');


0

Є деякі стилі, які неможливо легко усунути. (Переповнення приходить на думку)

Приблизним рішенням буде створення двох різних класів та додавання / видалення того, що містить потрібний вам стиль.

НЕ найкраще рішення для властивостей стилю, які можна легко видалити / вимкнути.


0

Для видалення стилів css призначте стилю порожній рядок

в цьому випадку

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.