Ho creato un evento jquery personalizzato chiamato "caricamento" nella mia applicazione. Voglio aggiungere un elemento di mascheramento con uno spinner, quando questo evento viene attivato. Posso capire quella parte senza problemi. Tuttavia, alcuni elementi (immagini, input di modulo, ecc.) Non possono aggiungere elementi figlio. Devo essere in grado di rilevare se l'obiettivo di questo evento può ricevere elementi figlio. Se non è possibile, aggiungerò la maschera filatore & all'elemento padre.Come si rileva se un elemento html può aggiungere nodi figlio?
risposta
Devi controllare il nome:
/*global $, jQuery */
function isVoid(el) {
var tags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input',
'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'],
i = 0,
l,
name;
if (el instanceof jQuery) {
el = el[0];
}
name = el.nodeName.toLowerCase();
for (i = 0, l = tags.length; i < l; i += 1) {
if (tags[i] === name) {
return true;
}
}
return false;
}
e usarlo in questo modo:
var el = document.getElementById('el'),
elj = $('#el');
if (!isVoid(el)) {
// append
}
È possibile aggiungere elementi secondari, non verranno semplicemente visualizzati. Questo può sembrare una distinzione semantica, ma è fondamentale per il tuo problema: il DOM non conosce se un determinato tag è reso o meno.
La cosa migliore è solo quello di controllare il manuale:
var allowChildren = function(elem) {
return ! (elem.nodeName in { INPUT : true, IMG : true }) ;
};
Non ho mai visto che la sintassi booleana. È valido? Quindi suppongo che potrei cercare le specifiche per gli elementi void e aggiungerlo a quell'hash. – demersus
Penso che la creazione di una tabella di elementi vuoti sarà l'unica soluzione reale. Anche se presumo tu intendi 'return! {Input: true, img: true} [elem.nodeName]' –
http://jsfiddle.net/mblase75/eGyRH/3/ - Chrome mi consente di aggiungere un elemento figlio a un ' 'tag, anche se non è visualizzato affatto. È visibile nel debugger DOM, ma non nella finestra del browser. – Blazemonger
http://jsfiddle.net/mblase75/eGyRH/3/ - Chrome mi consente di aggiungere un elemento figlio a un tag <input>
, anche se non è visualizzato affatto. È visibile nel debugger DOM, ma non nella finestra del browser.
Tuttavia, posso provare che è .width()
e vedere che è uguale a zero o no: http://jsfiddle.net/mblase75/eGyRH/4/
alert($('.element').append('<span>asdf</span>').children().width());
Tuttavia, questo sarà anche la larghezza pari a zero se, per esempio, sto aggiungendo l'arco ad una nascosta div: http://jsfiddle.net/mblase75/eGyRH/5/ - quindi non è totalmente affidabile neanche.
La risposta accettata ha una funzione molto bella basata su which types of nodes can be void. Esso può essere sostituito da un jQuery one-liner:
node.is("area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr")
- 1. jQuery: Rileva se esiste un elemento
- 2. Rileva se clicco su un elemento all'interno di un elemento
- 3. Verificare se un elemento contiene un elemento figlio specifico
- 4. Rileva se il genitore html è nascosto
- 5. Come aggiungere un elemento figlio per XML in PowerShell
- 6. Verifica se un elemento è figlio di un genitore
- 7. Elemento JQuery get contenente elemento figlio con valore html specifico
- 8. Rileva mouseSpostato evento per elemento canvas HTML
- 9. Un elemento HTML può avere attributi arbitrari?
- 10. jQuery aggiungi nodi figlio per ogni
- 11. jQuery - Il modo giusto per aggiungere un elemento figlio?
- 12. Web Config trasformazione per aggiungere un elemento figlio
- 13. XmlPullParser ottiene i nodi figlio
- 14. Attraversare i nodi figlio con DOMXpath PHP?
- 15. Come aggiungere HTML arbitrario a un elemento di Dart?
- 16. Se l'elemento genitore non contiene un determinato elemento figlio; jQuery
- 17. numero pugixml di nodi figlio
- 18. Un elemento HTML può avere più attributi ID univoci?
- 19. Come mostrare elemento figlio quando un altro elemento figlio sta traboccando con JQuery
- 20. Angular2 - Get luce componente DOM innerHTML nodi/figlio
- 21. Aggiungere un elemento quando si chiama "DOMNodeInserted"
- 22. Come si può aggiungere un intero a un ArrayList stringa?
- 23. Selettore jQuery per un elemento MANCANTE un elemento figlio
- 24. come annullare l'opacità per un elemento figlio?
- 25. Come sostituire un elemento figlio in ElementTree
- 26. Come si può verificare se un elemento appartiene a un sottotipo o all'altro?
- 27. Aggiungere testo prima o dopo un elemento HTML
- 28. non si può aggiungere un riferimento .NET
- 29. Riordinare i nodi figlio in django-MPTT
- 30. Come verificare se il cursore si trova su un elemento?
indexOf non è cross browser per gli array: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf – Joe
Utilizzare _.indexOf se si supporta IE8 e precedente – jasssonpet
Nice. Può valere la pena aggiungere ''# testo'' nel caso in cui un nodo di testo trovi la sua via. –