Як я можу стерти всі вбудовані стилі за допомогою JavaScript і залишити лише стилі, зазначені в таблиці стилів css?


94

Якщо в моєму html є таке:

<div style="height:300px; width:300px; background-color:#ffffff;"></div>

І це в моїй таблиці стилів css:

div {
    width:100px;
    height:100px;
    background-color:#000000;
}

Чи є якийсь спосіб, за допомогою javascript / jquery, видалити всі вбудовані стилі і залишити лише стилі, зазначені в таблиці стилів css?

Відповіді:


166

$('div').attr('style', '');

або

$('div').removeAttr('style');(З відповіді Андреса )

Щоб зробити це трохи менше, спробуйте це:

$('div[style]').removeAttr('style');

Це повинно трохи пришвидшити, оскільки перевіряє, що div має атрибут style.

У будь-якому випадку, обробка може зайняти небагато часу, якщо у вас є велика кількість дівок, тож ви можете розглянути інші методи, ніж JavaScript.


Якщо йому доведеться видалити атрибут стилю, його також доведеться шукати, тому останнє рішення виглядає як лише зробити код dirtier imho. Найкраще, звичайно, буде вибрати лише ті елементи, які вам потрібні для видалення стилю, можливо, через ID.
Хосе Фаети

Це буде націлено лише на div. Що робити, якщо ви хочете націлити все?
вуличне світло

1
Як пов'язаний бік, виклик .css()порожньої рядка як другого значення видалить саме вказане значення зі стилів вбудованого розміру, наприклад, $ ('div'). Css ('display', ''); видалить лише властивість вбудованого відображення (якщо встановлено).
Том Девіс

2
@streetlight Використовуйте $('*').removeAttr('style')для орієнтування на все.
Маказе

Ні, насправді другий повинен бути трохи швидшим, тому що якщо JQuery має якийсь сенс, тоді він буде використовувати стандартний removeattribute. Крім того, ви забули величезні неефективні накладні витрати на циклі, хоча і більше елементів DOM, що робить другий метод ще швидшим, ніж перший.

32

Звичайний JavaScript:

Вам не потрібен jQuery, щоб зробити щось таке тривіальне. Просто використовуйте .removeAttribute()метод.

Припускаючи, що ви просто націлюєтесь на один елемент, ви можете легко використовувати наступне: (приклад)

document.querySelector('#target').removeAttribute('style');

Якщо ви націлюєтеся на кілька елементів, просто прокрутіть вибрану колекцію елементів: (приклад)

var target = document.querySelectorAll('div');
Array.prototype.forEach.call(target, function(element){
    element.removeAttribute('style');
});

Array.prototype.forEach()- IE9 і вище / .querySelectorAll()- IE 8 (частково) IE9 і вище.


1
Альтернативою Array.prototype.forEach.callє досить добре підтримуваний оператор splat, який зберігає лінію:[... document.querySelectorAll('div')].forEach(div => div.removeAttribute('style')) .

22
$('div').removeAttr('style');

Це ефективніше, ніж робити attr ('style', '')?
Метт

з $ ('div'). attr ('style', ''); <div style = ""> </div> з $ ('div'). removeAttr ('style'); <div> </div> є більш чистим
andres descalzo

ймовірно, тому, що він не встановлює його до нульового значення, але в будь-якому випадку ви отримаєте великий час на обробку, оскільки він повинен пройти кожен div в тілі.
Тайлер Картер,

так, це зрозуміло, його слід змінити на ID $ ("# id") або клас $ (".classDivs)
andres descalzo

3

Я використовував цю $('div').attr('style', '');техніку, і вона не працювала в IE8.

Я вивів атрибут стилю за допомогою alert() і він не видаляв вбудовані стилі.

.removeAttr в кінцевому підсумку зробив фокус в IE8.


3

Якщо вам потрібно просто спорожнити styleелемент, тоді:
element.style.cssText = null;
Це має принести користь. Сподіваюся, це допоможе!


Схоже, застосовується подібна логіка при спробі "спорожнити" лише властивість одного стилю для елемента: element.style.display = null;- ось що мені потрібно: D
Білал Акіл

1

Це можна здійснити в два етапи:

1: виберіть елемент, який ви хочете змінити, за назвою тегу, ідентифікатором, класом тощо.

var element = document.getElementsByTagName('h2')[0];

  1. видаліть атрибут стилю

element.removeAttribute('style');


-2

Ви також можете спробувати вказати css у таблиці стилів як! Важливий


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