2010-02-18 5 views
8

Y at-il un moyen de détecter si une étiquette est auto-fermante avec JQuery comme une étiquette d'image? Quelque chose de dynamique n'est pas juste un tag d'image.JQuery détecter si une étiquette est à fermeture automatique

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

Pourquoi avez-vous besoin de trouver cela? – cletus

+0

@cletus: Provient de la question précédente de l'OP: http://stackoverflow.com/questions/2291434/jquery-check-if-prepend-failed – Sampson

Répondre

2

Avez-vous besoin de faire la distinction entre un élément vide et une fermeture automatique? Sinon, vous pouvez utiliser:

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

Mais si vous parlez de détecter si une balise HTML donné doit être vide ou non, pas vous ne pouvez pas le faire parce que vous n'êtes programme pas empêché de créer invalide HTML et vous devez le valider par rapport à une DTD pour le savoir.

+0

Cela fonctionne pour mes fins et fait ce qui précède, mais je pense que celui-ci est la réponse la plus propre. – Hatchware

10

jQuery utilise cette liste interne:

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

Vous pouvez faire la même chose:

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

Cela devrait être la réponse acceptée. –

0

Vous pouvez vérifier l'accesseur .html() pour voir si elle retourne une chaîne vide. Bien que cela retournera vrai sur <p></p> mais je l'imagerie à toutes fins utiles qui pourrait être traitée comme une étiquette de fermeture automatique.

3

Vous avez besoin d'un peu d'arrière-plan. Le balisage HTML envoyé sur le réseau est analysé par le navigateur dans une arborescence DOM. À ce stade, le balisage d'origine est parti, a servi son but, et n'existe plus. Lorsque vous faites innerHTML sur un élément, ce n'est pas le code HTML littéral qui a généré l'élément, mais la sérialisation du navigateur de ce sous-arbre DOM. Le point est, il n'y a pas de différence entre <div /> et <div></div>. Alors, regarde s'il y a des enfants. Si ce n'est pas le cas, l'élément a ont une représentation XHTML possible qui utilise une étiquette à fermeture automatique.

element.children().length == 0 

ou Cletus dit:

element.is(":empty") 
+1

'children()' ne renvoie pas de nœuds de texte. Comme jQuery l'implémente, vous devez utiliser 'element.contents(). Length' au lieu de' element.children(). Length'. Children() renvoie tous les éléments _tag_ enfants. Contents() retourne tous les enfants _tag_ elements ** plus ** tout node_text. Exemple: '$ ('

hello
') .children(). Length' renvoie 0, alors que' $ ('
hello
') .contents(). Length' renvoie 1. –

Questions connexes