Diese Funktion behält auch versteckte Inhalte bei.
function remove_style(all) {
var i = all.length;
var j, is_hidden;
// Presentational attributes.
var attr = [
'align',
'background',
'bgcolor',
'border',
'cellpadding',
'cellspacing',
'color',
'face',
'height',
'hspace',
'marginheight',
'marginwidth',
'noshade',
'nowrap',
'valign',
'vspace',
'width',
'vlink',
'alink',
'text',
'link',
'frame',
'frameborder',
'clear',
'scrolling',
'style'
];
var attr_len = attr.length;
while (i--) {
is_hidden = (all[i].style.display === 'none');
j = attr_len;
while (j--) {
all[i].removeAttribute(attr[j]);
}
// Re-hide display:none elements,
// so they can be toggled via JS.
if (is_hidden) {
all[i].style.display = 'none';
is_hidden = false;
}
}
}
Verwendung
Rufen Sie die Funktion wie folgt auf
var all = document.getElementsByTagName('*');
remove_style(all);
Hinweis: Das Auswählen aller Elemente auf der Seite über eine Wildcard-Abfrage kann je nach Anzahl der Elemente auf der Seite langsam sein. Sie könnten eine kleinere Menge von Elementen verwenden, um eine höhere Leistung zu erzielen.
var set = document.getElementById('foo').getElementsByTagName('bar');
remove_style(set);
Ausgezeichnetes Schnipsel, danke für das Teilen. Ich kann mir vorstellen, dass dies sehr nützlich ist, wenn man versucht, eine alte Website zu aktualisieren, bei der der Kunde sie nicht neu kodieren möchte.
Danke für das Schnipsel!
Es wäre toll, wenn es ein Bookmarklet gäbe, das so etwas tut. Es könnte nützlich sein, um schnell zu prüfen, wie viel Arbeit Sie beim Konvertieren einer Seite in HTML5-Standards leisten müssen, wo viele dieser Attribute obsolet sind.
Ich habe das Bookmarklet erstellt, das tut, was ich oben beschrieben habe!
Wenn Sie interessiert sind, schauen Sie es sich unter attrebuke an.
Ich habe gerade ein kleines Problem damit gefunden. Anscheinend funktioniert in IE `removeAttribute` bei `bgColor` (mit großem `C`) aber NICHT bei `bgcolor`. Es ist also wahrscheinlich am besten, beide zu haben.
Als Designer, der viel Zeit damit verbringt, den Code anderer Leute zu bearbeiten/reparieren, ist dies eine Rettung! Ich kann es kaum erwarten, es auszuprobieren. Es scheint, als würde es am besten für Projekte mit gezielten Elementen funktionieren, die gestaltet werden müssen.
Dasselbe mit jQuery
Alle Stile entfernen
$(‘#foo bar’).removeAttr(‘style’);
Einen entfernen
$(‘#foo bar’).css(‘float’,”);
Wenn Sie bereit sind, andere Inline-Stile für dieses Element zu ersetzen, können Sie die Eigenschaft `style.cssText` verwenden.
document.getElementById(‘idstring’).style.cssText=
‘font-size:1em;color:blue;visibility:visible’;
Hier ist der Quellcode oben
OK…. was ist also der Unterschied zwischen der Verwendung von diesem und `element.removeAttribute(‘style’)`?
styleist nur ein mögliches präsentationsbezogenes Attribut.Ich war super begeistert, als ich das gefunden habe und dachte, es würde mir helfen, ALLE Inline-Stile aus einer HTML-E-Mail zu entfernen. Es scheint jedoch nicht zu funktionieren. Ich beginne zu untersuchen, warum, aber hier ist, was ich vermute:
Meine HTML-E-Mail ist kein HTML5-Dokument.
Das ist alles, was ich im Moment habe.
Ich habe das Bookmarklet auch ohne Erfolg ausprobiert.
Sollte das für HTML-E-Mails funktionieren? Ich habe versehentlich meine gesamte CSS-Datei inline gesetzt und ein paar Stunden lang optimiert und über der nicht-inline gesetzten Version gespeichert. Der Schmerz. Ich werde etwas Zeit damit verbringen, es zum Laufen zu bringen, aber irgendwann könnte es schneller sein, die HTML-E-Mail neu zu erstellen – aus Zeitsparungsgründen.
Was denkst du?
Falls jemand anderes diesen Beitrag findet, hier ist, wie man Inline-Stile aus Ihrer HTML-E-Mail entfernt:
Fügen Sie Folgendes direkt vor dem schließenden `body`-Tag ein:
Speichern Sie die Datei und öffnen Sie sie in Ihrem Browser. Klicken Sie mit der rechten Maustaste und wählen Sie "Inspizieren". Klicken Sie dann mit der rechten Maustaste auf das HTML-Element, wählen Sie "Als HTML bearbeiten" und Sie können jetzt alles auswählen, um das HTML mit entfernten Inline-Stilen zu kopieren.
Wenn Sie bedingte Kommentare in HTML verwenden (was Sie tun sollten), müssen Sie später ein wenig manuelles Suchen und Ersetzen durchführen, um die Inline-Stile aus allem innerhalb von bedingten Kommentaren zu entfernen.
Als Nachgang zu meinem (alten) Kommentar oben habe ich in meinem Blog etwas detaillierter eine Lösung für dieses Problem veröffentlicht.
http://wepiphany.com/remove-inline-styles-from-html-email/
Funktioniert das NUR mit `getElementById`?
Ich habe das versucht
var targetElement = document.getElementById(“div2”);
und es hat nicht funktioniert.
Kann man eine ID verwenden? (Es scheint einfacher zu sein, das Element gezielt anzusprechen, besonders wenn es nur 1 Element gibt.)