2010-08-29 9 views
10

jak usunąć wszystkie atrybuty z js lub jquery. (Nie wiem jakie są atrybuty w ciele, chcę je wszystkie usunąć)jak usunąć wszystkie atrybuty z <body> z js lub jquery

+2

Jaki jest twój cel końcowy, robiąc to? –

+1

@meder: Mogę tylko założyć, że nie może kontrolować wyjścia strony, którą kontroluje. –

+0

Nieco powiązane http://stackoverflow.com/questions/2048720/get-all-attributes-from-a-mlml-element-with-javascript-jquery – BrunoLM

Odpowiedz

19

Możesz użyć właściwości DOM Level 1 Core attributes, aby uzyskać dostęp do atrybutów jako listy. Jako zwykły JS:

function removeAllAttrs(element) { 
    for (var i= element.attributes.length; i-->0;) 
     element.removeAttributeNode(element.attributes[i]); 
} 
removeAllAttrs(document.body); 

Albo przebrany w jQuery plugin ubrania:

$.fn.removeAllAttrs= function() { 
    return this.each(function() { 
     $.each(this.attributes, function() { 
      this.ownerElement.removeAttributeNode(this); 
     }); 
    }); 
}; 

$('body').removeAllAttrs(); 
+0

To jest to, czego potrzebuję. Dziękuję bardzo. – faressoft

+1

+1 świetne rozwiązanie. Powinieneś zaakceptować odpowiedź @faressoft – Marko

+0

Czy to działa w IE? W IE "attributes" zawiera wszystkie możliwe nazwy atrybutów, niezależnie od tego, czy zostały ustawione, i zastanawiałem się, czy może to spowodować problemy. Jeszcze tego nie testowałem. –

0
var $newBody = $('<body>'); 
$newBody.append($('body').contents()); 
$('body').replaceWith($newBody); 

Coś jak to może działać.

+3

Zastąpienie 'body' ma efekt uboczny utraty jakichkolwiek odnośników do JavaScript/jQuery wskazujących na to, włączając w to wszelkie programy obsługi zdarzeń na nim. – bobince

+0

onclick itp. Są atrybutami z punktu widzenia XHTML. Ponadto, jest to trywialne, aby upewnić się, że będzie to działało przed jakimkolwiek innym wiązaniem zdarzenia jQuery. –

0

ja nie wiem, czy to jest najlepszy sposób, ale działa

$('body').each(function(){ 
    var $body = $(this); 
    var attributes = $.makeArray(this.attributes); 

    $.each(attributes, function(indexInArray, valueOfElement) { 
     $body.removeAttr(valueOfElement.name); 
    }); 
}); 
+0

Czy "każdy" jest naprawdę potrzebny? –

2

Zakładając, że chcesz usunąć atrybuty do element, można użyć coś takiego

$(element).removeAttr($.makeArray(element.attributes) 
         .map(function(item){ return item.name;}) 
         .join(' ')); 

Należy pamiętać, że to będzie działać tylko z jQuery 1.7+

0

Od ES2015, możesz użyć Array.from().

const el = document.body; 
const attributes = Array.from(el.attributes); 
attributes.forEach(attr => el.removeAttributeNode(attr)); 
Powiązane problemy