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


169

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

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

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


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': ''
});

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', '')


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:''});

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.