Удалите 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.