2010-08-29 7 views
10

cómo eliminar todos los atributos de js o jquery. (No sé cuáles son los atributos del cuerpo, quiero eliminarlos todos)cómo eliminar todos los atributos de <body> con js o jquery

+2

¿Cuál es su objetivo final al hacer esto? –

+1

@meder: solo puedo suponer que no puede controlar la salida de la página que controla. –

+0

Algo relacionado http://stackoverflow.com/questions/2048720/get-all-attributes-from-a-html-element-with-javascript-jquery – BrunoLM

Respuesta

19

Puede usar la propiedad DOM Level 1 Core attributes para acceder a los atributos como una lista. Como JS llano:

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

O vestido con ropas plugin de jQuery:

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

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

Esto es lo que necesito. Muchas gracias. – faressoft

+1

+1 gran solución. Deberías aceptar la respuesta @faressoft – Marko

+0

¿Funciona esto en IE? En IE 'attributes' contiene todos los posibles nombres de atributo, independientemente de si se han configurado, y me pregunté si eso podría causar problemas. No lo he probado todavía –

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

Algo como esto podría funcionar.

+3

Reemplazar el 'cuerpo' tiene el efecto secundario de perder cualquier referencia de JavaScript/jQuery que lo señale, incluyendo cualquier manejador de eventos en él. – bobince

+0

onclick, etc. son atributos desde un punto de vista XHTML. Además, es trivial asegurarse de que esto se ejecute antes que cualquier otro enlace de evento jQuery. –

0

No sé si es la mejor manera pero funciona

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

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

¿Es "necesario" cada "aquí"? –

2

Suponiendo que desea quitar los atributos de element, se puede usar algo como

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

Tenga en cuenta que esto solo funcionará con jQuery 1.7+

0

A partir de ES2015, puede usar Array.from().

const el = document.body; 
const attributes = Array.from(el.attributes); 
attributes.forEach(attr => el.removeAttributeNode(attr)); 
Cuestiones relacionadas