2010-02-18 9 views
8

¿Hay alguna forma de detectar si una etiqueta se cierra automáticamente con JQuery como una etiqueta de imagen? Algo dinámico no solo una etiqueta de imagen.JQuery detecta si una etiqueta se cierra automáticamente

if ($('.selector')[0].tagName.toLowerCase()=="img") { 
    // do something 
} 
+0

¿Por qué necesita para averiguar esto? – cletus

+0

@cletus: proviene de la pregunta previa de OP: http://stackoverflow.com/questions/2291434/jquery-check-if-prepend-failed – Sampson

Respuesta

2

¿Necesita distinguir entre un elemento que está vacío frente a uno de cierre automático? Si no es así, puede utilizar:

if ($(".selector").is(":empty")) { 
    // do something 
} 

Pero si estamos hablando acerca de cómo detectar si una etiqueta HTML dado debe estar vacío o no, no, no puedes hacer eso mediante programación, ya que no está detenido desde crear inválida HTML y necesita validarlo contra una DTD para averiguarlo.

+0

Esto funciona para mis propósitos y también lo anterior, pero creo que este es la respuesta más limpia. – Hatchware

10

jQuery utiliza esta lista interna:

/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i 

Usted puede hacer lo mismo:

if(/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i.test($('.selector')[0].tagName)) { 
//do something 
} 
+1

Esta debería ser la respuesta aceptada. –

0

se puede comprobar el descriptor de acceso .html() para ver si se devuelve una cadena vacía. Aunque esto volverá a ser cierto en <p></p>, pero tendría imágenes para todos los efectos que podrían tratarse como una etiqueta de cierre automático.

3

Necesita un poco de experiencia. El código HTML que se envía a través del cable lo analiza el navegador en un árbol DOM. En el punto, el marcado original se ha ido, se ha cumplido su propósito y ya no existe. Cuando se hace innerHTML en un elemento, ese no es el HTML literal que generó el elemento, sino la serialización del navegador de ese subárbol DOM.

El punto es que no hay diferencia entre <div /> y <div></div>. Así que solo mira si tiene hijos. Si no lo hace, el elemento tiene tiene una posible representación XHTML que utiliza una etiqueta de cierre automático.

element.children().length == 0 

o como Cletus dice:

element.is(":empty") 
+1

'children()' no devuelve nodos de texto. A medida que jQuery lo implementa, debe usar 'element.contents(). Length' en lugar de' element.children(). Length'. Children() devuelve todos los elementos _tag_ de niños. Contents() devuelve todos los elementos _tag_ hijos ** más ** todo el texto_nodo. Ejemplo: '$ ('

hello
') .children(). Length' devuelve 0, mientras que' $ ('
hello
') .contents(). Length' devuelve 1. –

Cuestiones relacionadas