Eliminar todos los elementos que no posean un atributo específico

Tengo un pequeño documento en el que cada etiqueta tiene un atributo como

keep="true"

¿Cómo puedo iterar a través de todo <body></body> y elimine todo el HTML interno de estas etiquetas (eliminándolas también) que no tengan este atributo establecido.

Preferiría usar jQuery, si es posible.

preguntado el 28 de julio de 12 a las 12:07

2 Respuestas

Podrías combinar un :no() seleccionador con un Atributo igual selector:

$(":not([keep='true'])").remove();

O tal vez incluso un simple Tiene atributo selector, según la semántica de marcado:

$(":not([keep])").remove();

Edit: Si desea eliminar los elementos coincidentes pero conservar su contenido, puede encadenar niños() dentro desenvolver() en lugar:

$(":not([keep])").children().unwrap();

Respondido 28 Jul 12, 13:07

Gracias, muy útil. ¿Es posible para mí establecer keep="true" por ejemplo, un <div> y se han saltado los hijos (mantenidos junto con los padres)? - user1559555

@usuario, sí, tendrías que usar children().unwrap() en lugar de remove() Para hacer eso. - Frederic Hamidi

Quise decir: ¿es posible mantener a los niños si sus padres tienen el conjunto de atributos, incluso si los niños no lo tienen? - user1559555

@usuario, eso depende. eres tu [keep] elementos todos hermanos del mismo nivel bajo un ancestro común? (Sin embargo, debería haber mencionado estos requisitos en su pregunta). Frederic Hamidi

todo difiere con casi cada div. Algunos tienen contenido de texto simple, otros incluyen estructuras de varios niveles... Sería perfecto mantener a todos los padres con Atributo, todos sus hijos y los hijos de sus hijos, etc. - user1559555

keep no es un atributo válido, puede utilizar data-* atributo y probar:

$('*:not([data-keep="true"])').empty()

$('div:not([data-keep="true"])').empty()

Respondido 28 Jul 12, 12:07

¿Es posible para mí configurar data-keep="true" para, por ejemplo, un y se han saltado los hijos (mantenidos junto con los padres)? - user1559555

sí, puede seleccionar etiquetas div, que también es más rápido que usar el selector universal, pruebe la respuesta actualizada. - Carnero

Quise decir: ¿es posible mantener a los niños si sus padres tienen el conjunto de atributos, incluso si los niños no lo tienen? - user1559555

@ user1559555 sí, entendí, la respuesta actualizada mantiene a los elementos secundarios de las etiquetas div que tienen data-keep="true" atributos y quitar hijos de los que no los tienen. - Carnero

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.