як видалити властивість css за допомогою javascript?


195

чи можна видалити властивість CSS елемента за допомогою JavaScript? наприклад, у мене є div.style.zoom = 1.2, тепер я хочу видалити властивість збільшення через JavaScript?


3
Поясніть, будь ласка, ви намагаєтесь видалити клас з якогось елемента або атрибут з якогось елемента?
Ян Ханчич

1
Вибачте за це, а не атрибут класу для елемента.
сн

навіщо знижувати? це досить гідне питання, ні?
Роланд Буман

2
Привіт, сидів, я не розумію - чому ти позначив відповідь наївців "прийнятою відповіддю"? Я маю на увазі, його рішення добре, якщо ви хочете знайти елементи за класом, але все у вашому запитання вказує на те, що ви шукали метод змінити ефект встановлення властивості місцевого стилю. Звичайно, моя відповідь краще відповідає проблемі? Можливо, я неправильно зрозумів ваше запитання?
Roland Bouman

1
@RolandBouman насправді прийняту відповідь слід змінити на відповідь Едвінаса Ільченка, оскільки вона стосується того, що було запропоновано про видалення, а не про зміну за замовчуванням. Ваша відповідь все ще має значення, тому я її відредагував, щоб уточнити відмінність.
Уїтніленд

Відповіді:


187

У вас є два варіанти:

ВАРІАНТ 1:

Можна скористатися методом removeProperty . Це видалить стиль з елемента.

el.style.removeProperty('zoom');

ВАРІАНТ 2:

Ви можете встановити його за замовчуванням:

el.style.zoom = "";

Ефективне збільшення тепер буде залежати від визначень, наведених у таблицях стилів (через посилання та теги стилів). Тож цей синтаксис лише змінить локальний стиль цього елемента.


... разом із CSS користувача та стилями браузера за замовчуванням.
Квентін

Я зрозумів, що ОП означає, що вони хочуть зробити це так, ніби вони не встановили властивість стилю елемента, саме це ви надали. Я спробував використовувати el.style.removeProperty ('zoom'); (або "заповнити", власне, в моєму випадку), який, схоже, робить те саме в IE, і інші браузери ігноруються. Я чомусь здивувався, виявивши, що встановлення його на порожній рядок має такий же ефект і, здається, працює на всіх (останні версії) браузерах.
Шавай

Чи вказана така поведінка десь у стандарті? Я не можу його знайти :-(
Олівер Джозеф Еш

@OliverJosephAsh та це документально, побачити цю відповідь нижче stackoverflow.com/a/7901886/700206
whitneyland



10

Ви можете використовувати об’єкт styleSheets:

document.styleSheets[0].cssRules[0].style.removeProperty("zoom");

Застереження №1: Ви повинні знати індекс свого таблиця стилів та індекс свого правила.

Caveat №2: Цей об’єкт реалізується непослідовно браузерами; те, що працює в одних, може не працювати в інших.


Це здається справді крихким. Не зламається, коли ваші індекси змінюються?
Кейсі Родармор

Так. Саме так говорить застереження №1.
james.garriss

У моєму Chrome 26 немає CSSStyleRule.prototype.removeProperty= (Насправді CSSStyleRuleнемає методів. = (
Rudie

CSSStyleSheet.prototype.removeRuleна допомогу.
Rudie

@Rudie, чи не так CSSStyleSheet.prototype.deleteRule?
рока

7
element.style.height = null;

вихід:

<div style="height:100px;"> 
// results: 
<div style="">

Здається, що встановлення стилю null не працює в IE11.
MaximeW

1
Чому хтось повинен піклуватися про IEбраузери? Я навмисно їх ігнорую вже роками.
Т.Тодуа

4

Ви можете спробувати знайти всі елементи, які мають цей клас, і встановити властивість "масштабування" на "нічого".

Якщо ви використовуєте бібліотеку JavaScript jQuery, ви можете це зробити $(".the_required_class").css("zoom","")

Редагувати: Видалено це твердження, оскільки виявилося неправдивим, на що вказувалося в коментарі та інших відповідях, що це справді можливо з 2010 року.

Неправильно: загальновідомий спосіб зміни таблиць стилів з JavaScript не існує.


5
Так, є. Змінювати таблиці стилів програмно, хоча JavaScript не є складним. Він працює крос-браузер з великою продуктивністю і дійсно має сенс при зміні одного властивості, яке повинно бути однаковим на купі елементів. Як і в січні 2010 року Ось короткий приклад: stackoverflow.com/questions/14927706 / ...
CLOX

Clox: Додавання таблиць стилів, які програмно перекривають якусь властивість - звичайно! Модифікація вже завантажених - ніколи не чув про це.
наївісти

Це означає бути css (), а не attr (). Або це можливо attr () в IE?
Alex KeySmith

насправді це має бути css, ні attr, ти маєш рацію.
наївісти


0

Для цього слід зробити трюк - встановивши стиль вбудованої форми для нормального масштабування:

$ ('div'). attr ("стиль", "масштабування: нормальне;");


1
Питання полягало в тому, як видалити стиль, ця відповідь знищить усі існуючі стилі та замінить їх одним новим записом.
Уїтніленд

0

насправді, якщо ви вже знаєте властивість, це зробить ...

наприклад:

<a href="test.html" style="color:white;zoom:1.2" id="MyLink"></a>

    var txt = "";
    txt = getStyle(InterTabLink);
    setStyle(InterTabLink, txt.replace("zoom\:1\.2\;","");

    function setStyle(element, styleText){
        if(element.style.setAttribute)
            element.style.setAttribute("cssText", styleText );
        else
            element.setAttribute("style", styleText );
    }

    /* getStyle function */
    function getStyle(element){
        var styleText = element.getAttribute('style');
        if(styleText == null)
            return "";
        if (typeof styleText == 'string') // !IE
            return styleText;
        else  // IE
            return styleText.cssText;
    } 

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

Інша примітка: можливо, вам доведеться уникнути деяких символів у цій заяві, що замінює, але ви отримаєте ідею.


-3

Щоб змінити всі класи для елемента:

document.getElementById("ElementID").className = "CssClass";

Щоб додати додатковий клас до елемента:

document.getElementById("ElementID").className += " CssClass";

Щоб перевірити, чи клас вже застосовується до елемента:

if ( document.getElementById("ElementID").className.match(/(?:^|\s)CssClass(?!\S)/) )

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