Come posso modificare un elemento JS per vedere se si tratta di un nodo o di una variabile vuota?Verificare se la variabile è un elemento nodo valido
risposta
Dipende da cosa intendi per variabile vuota.
Se significa che non ha avuto un valore assegnato, è possibile verificare la presenza di undefined
alert(someVariable !== "undefined");
Oppure, se si sa che ha un valore, e la necessità di vedere se si tratta di un elemento, si potrebbe fare qualcosa di simile:
alert(someVariable && someVariable.nodeType);
Oppure, se avete bisogno di verificare che si tratta di un elemento di tipo 1, si potrebbe fare questo:
alert(someVariable && someVariable.nodeType === Node.ELEMENT_NODE);
Elimina nodi di testo, nodi attributi, commenti e a bunch of others.
Un nodo? Un elemento DOM? avrebbe una proprietà .nodeType
.
Riguardo nodeValue
per l'altra risposta, il nodeValue può vuoto ma un nodo sempre un nodeType
.
utilizzando l'elemento HTML e dare un'occhiata alla scheda Proprietà in Chrome Dev Tools possiamo vedere i discendenti:
HTML-> HTMLHtmlElement-> HTMLElement-> elemento-> Node> EventTarget- > oggetto
Ora non vogliamo controllare i primi 2 non importa cosa, troppe possibilità diverse in modo che ci lasciano con HTMLElement o elemento. Quindi qual è la differenza?
HTML, HEAD, SCRIPT, META, CORPO, DIV, P e UL hanno tutti la stessa eredità:
HTMLElement-> elemento-> Node> EventTarget-> Oggetto
ora un paio di risultati negativi da un documento tipico in cui:
<!DOCTYPE html> DocumentType->Node->EventTarget->Object
<!-- COMMENT --> Comment->CharacterData->Node->EventTarget->Object
Quindi il nodo è il denominatore comune, ma la domanda è su come controllare un nodo DOM valido è come verificare un elemento del nodo DOM valido. Quindi qualsiasi oggetto con HTMLElement restituisce true, altrimenti restituisce false.
Ok ora utilizzando gli strumenti di Chrome Dev consente di guardare l'elemento HTML:
$obj.nodeType; //1 No help what so ever
$obj.nodeName; //HTML Gives use the tag names
$obj.nodeValue; //null Waste of DOM space
cerchiamo di controllare il prototipo o __proto?
$obj.prototype.nodeType; //TypeError
$obj.prototype.nodeName; //TypeError
$obj.prototype.nodeValue; //TypeError
$obj.__proto__.nodeType; //undefined
$obj.__proto__.nodeName; //undefined
$obj.__proto__.nodeValue; //undefined
Ok, quindi utilizzare il nodo è morto da utilizzare. Consente di passare al costruttore.
$obj.constructor.name
//"HTMLHtmlElement" promising...
$obj.constructor.__proto__.prototype.toString()
//[object Object]
$obj.constructor.__proto__.constructor.name
Function
$obj.constructor.__proto__.prototype.constructor.name
HTMLElement
//BINGO
Ora consente di avvolgere in una bella funzione di utilità efficiente pulita.
//readable version
isElement=function($obj){
try {
return ($obj.constructor.__proto__.prototype.constructor.name)?true:false;
}catch(e){
return false;
}
}
/**
* PRODUCTION
* Return true if object parameter is a DOM Element and false otherwise.
*
* @param {object} Object to test
* @return {boolean}
*/
isElement=function(a){try{return a.constructor.__proto__.prototype.constructor.name?!0:!1}catch(b){return!1}};
Test:
$html=get('html')[0]; //[<html data-role="webpage" data-theme="dark" data-require="fa" data-hello="world">…</html>]
isElement($html); //"HTMLElement"
isElement($html.dataset); //false
isElement($html.firstChild); //"HTMLElement"
isElement($html.textContent); //false
$tail=gei('tail'); //<tail id="tail">…</tail>
isElement($tail); //"HTMLElement"
isElement(get('title')[0]); //"HTMLElement"
meder sottolinea che esiste sempre un nodeType e che è corretto. Questa è stata la prima cosa che ho controllato e il valore è 1. Lo standard nodeType 1 definito come "Elemento \t rappresenta un elemento \t Elemento, testo, commento, ProcessingInstruction, CDATASection, EntityReference". La domanda era per 'Elemento' non Testo, Commento, ecc. Quindi la mia funzione isElement() è la corretta? o mi sbaglio? – NlaakALD
- 1. Come verificare se un puntatore è valido?
- 2. Twig - Come verificare se la variabile è un numero/intero
- 3. Come verificare se un file è un file immagine valido?
- 4. Verificare se esiste un nodo utilizzando XSLT
- 5. Verificare se il nodo XML ElementTree è Nessuno/Falso
- 6. Come verificare rapidamente se l'oggetto NSString è un URL valido?
- 7. Come posso verificare se un elemento non è definito?
- 8. Come verificare se una stringa è un URL HTTP valido?
- 9. come verificare se un file jar è valido?
- 10. Come verificare/trovare se un elemento è in un DEQUE
- 11. Verificare se un percorso è valido in Python
- 12. Come verificare se un determinato descrittore di file memorizzato in una variabile è ancora valido?
- 13. Come faccio a verificare se una variabile è un oggetto jQuery o un elemento DOM semplice?
- 14. Verificare se un elemento è presente in un sacchetto?
- 15. Come verificare se la variabile del modello django è definita?
- 16. Verificare se la variabile ha il valore ''
- 17. Verificare se un elemento contiene un elemento figlio specifico
- 18. Come verificare se un elemento non è selezionabile con Goniometro?
- 19. Verificare se è un oggetto
- 20. Come verificare se esiste un elemento dell'array?
- 21. Pythoncially controlla se il nome di una variabile è valido
- 22. Come verificare se è impostato un elemento di archiviazione?
- 23. Come verificare se un elemento è fuori dallo schermo
- 24. Come verificare se un elemento dom è focalizzabile?
- 25. Come verificare se una variabile è un oggetto Moment.js?
- 26. Come verificare se una variabile è un oggetto IEnumerable
- 27. Come verificare se la matrice contiene almeno un elemento
- 28. Come verificare se una variabile enum è valida?
- 29. Come posso verificare se una variabile ambientale è impostata nel nodo js?
- 30. Verificare se la variabile esiste più di una volta nell'array?
Il nodeValue potrebbe essere vuoto/vuoto/nullo, no? '!! (document.createElement ('p')). nodeValue' –
Fintanto che non ci sono altri oggetti con la proprietà' nodeType'. Le probabilità sono scarse, però. – crush