2010-02-18 19 views
8

C'è un modo per rilevare se un tag si chiude automaticamente con JQuery come un tag immagine? Qualcosa di dinamico non solo un tag immagine.JQuery rileva se un tag è a chiusura automatica

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

Perché avete bisogno di trovare questo fuori? – cletus

+0

@cletus: deriva dalla precedente domanda dell'OP: http://stackoverflow.com/questions/2291434/jquery-check-if-prepend-failed – Sampson

risposta

2

È necessario distinguere tra un elemento vuoto o auto-chiusura? In caso contrario, è possibile utilizzare:

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

Ma se si sta parlando di rilevare se un determinato tag HTML deve essere vuoto o no, no, non può fare a livello di codice perché non siete fermati dalla creazione non valida HTML e devi convalidarlo con una DTD per scoprirlo.

+0

Questo funziona per i miei scopi e così fa quanto sopra, ma penso che questo sia la risposta più pulita – Hatchware

10

jQuery utilizza questa lista internamente:

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

Si può fare lo stesso:

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

Questa dovrebbe essere la risposta accettata. –

0

Si potrebbe verificare il .html() di accesso per vedere se si restituisce una stringa vuota. Anche se questo restituirà true su <p></p> ma farei l'imaging a tutti gli effetti che potrebbe essere trattato come un tag di chiusura automatica.

3

Hai bisogno di un po 'di background. Il markup HTML inviato attraverso il wire viene analizzato dal browser in un albero DOM. Al punto, il markup originale è sparito, è servito allo scopo e non esiste più. Quando si esegue innerHTML su un elemento, non è l'HTML letterale che ha generato l'elemento, ma la serializzazione del browser di tale sottostruttura DOM.

Il punto è, non c'è differenza tra <div /> e <div></div>. Quindi, guarda se ha bambini. In caso contrario, l'elemento ha una possibile rappresentazione XHTML che utilizza un tag a chiusura automatica.

element.children().length == 0 

o come Cletus dice:

element.is(":empty") 
+1

'children()' non restituisce nodi di testo. Come jQuery lo implementa, dovresti usare 'element.contents(). Length' invece di' element.children(). Length'. Children() restituisce tutti i bambini _tag_ elementi. Contents() restituisce tutti i figli _tag_ elements ** plus ** all node_text. Esempio: '$ ('

hello
') .children(). Length' restituisce 0, mentre' $ ('
hello
') .contents(). Length' restituisce 1. –

Problemi correlati