Удалите CSS «top» и «left» атрибуты с помощью jQuery

169

Я создаю перетаскиваемую карту, чтобы при перетаскивании карты элементу давали атрибуты left и top со значениями для каждого, как ...

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

У меня есть кнопка, с помощью которой я хочу удалить верхний и левый атрибут из встроенного стиля в div при нажатии. Возможно ли это с помощью jquery?

Liam
источник
9
Да, это так. По крайней мере, вы можете установить для них пустое значение, которое удаляет его.
Феликс Клинг
Возможный дубликат: Удалить атрибут CSS с помощью Jquery . Ответы там могут быть полезны для вас.
Дрю Гейнор
Обратите внимание, что ' 'это не считается только пустым значением''
Питер Берг
3
Чтобы удалить только одно свойство css за раз: var cssObject =$('selector').prop('style'); cssObject.removeProperty('top'); cssObject.removeProperty('left');
ilgaar
Просто для записи, установка пустого не всегда работает: «Установка значения свойства стиля в пустую строку ... Однако это не удаляет стиль, который был применен с правилом CSS в таблице стилей или < стиль> элемент. " - см. stackoverflow.com/questions/27791484/…
Мёрре

Ответы:

139

Значения по умолчанию для CSS topи leftтаковы auto, поэтому их установка может быть эквивалентной в зависимости от того, что вы пытаетесь сделать:

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

У вас также есть возможность полного удаления styleатрибута:

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

Однако, если вы используете другие компоненты пользовательского интерфейса jQuery, для них могут потребоваться встроенные стили, которые вы не хотите удалять, поэтому действуйте с осторожностью.

Роб Хруска
источник
61
обычно такие перезаписи, добавленные в атрибут style, предназначены для изменения значения по умолчанию со значения css; установка его в авто не сбрасывает их к значению по умолчанию. значение auto на самом деле не то же самое, что не имеет значения вообще. поэтому правильный ответ будет $ ('map'). css ('top', '');
dsomnus
15
Этот ответ неправильный, вы не удаляете атрибуты, а заменяете их чем-то другим. Кроме того, удаление целого тега стиля не имеет большого смысла, возможно, вы захотите сохранить некоторые атрибуты и удалить другие. Ответ wtrevino является правильным.
Алекс
Это не существенный вариант, так что иметь его там здорово! :) Для таких полей, как имя пользователя
Dean Meehan
5
Для справки, ответ @ wtrevino должен быть принятым здесь. Это конкретное решение работало для меня при некоторых обстоятельствах, но я бы удалил этот ответ, если бы мог. К сожалению, так как он принят, он не позволит мне.
Роб Хруска
Это не правильный ответ ... @wtrevino ответ самый правильный. Этот ответ будет работать, только если вы хотите удалить все статические стили из элемента ... в большинстве случаев это не то, что вы хотите сделать.
Ларс
427

Если вы хотите специально удалить атрибуты top и left и оставить другие, вы можете сделать это:

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

Или более короткий эквивалент:

$('.map').css({
    'top': '',
    'left': ''
});
wtrevino
источник
64
это лучший ответ, чем выбранный.
phirschybar
Ага. Это правильный ответ. Сначала это не имело смысла, потому что похоже, что ".css ('top', '')" просто создает пустое правило "top", но нет, оно полностью его удаляет.
Старкерс
2
Это лучший ответ пока. Но я думаю, что нашел другой. Я попробовал несколько разных. .css('left', undefined);ничего не изменилось. Передача нуля тоже ничего не сделала. Но .css('left', false);удаляет это свойство.
Виктор
Как и предполагали другие, это следует считать правильными ответами.
1
@Viktor Обратите внимание, что в документации явно сказано использовать пустую строку. Интересно, не работает ли false из-за какого-либо недокументированного принуждения типов, которое может исчезнуть в будущем? 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. Перейдите сюда: API jQuery
  2. Ctrl + F для удаления
  3. Читать:

Установка значения свойства стиля в пустую строку - например, $ ("#mydiv") .css ("color", "") - удаляет это свойство из элемента, если оно уже было применено напрямую, будь то в стиле HTML атрибута, с помощью метода jcuery .css () или прямого DOM-манипулирования свойством style.

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

Джейкоб Маккей
источник
5

За этот отчет об ошибке JQuery

element.removeAttr ( 'стиль')
не работает согласованно в браузерах на основе Webkit. Например, я столкнулся с этой проблемой на iOS 6.1. Исправление заключается в использовании:
element.attr ('style', '')

gnmerritt
источник
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 ( 'цвет').

Абденнур ТУМИ
источник
0

Есть несколько стилей, которые не могут быть легко удалены. (Переполнение приходит на ум)

Обходной путь - создать 2 разных класса и добавить / удалить тот, который содержит нужный вам стиль.

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

Петре Дан
источник
0

Для удаления стилей CSS назначьте пустую строку стилю

в таком случае

$('.map').css({top:'',left:''});
faboulaws
источник
-1
 $("#map").css("top", "0"); 
 $("#map").css("left", "0"); 
Сказал Эррауди
источник
это устанавливает его в 0, не удаляет свойство
Martin