2011-02-17 1 views
11

Je voudrais écrire une fonction jquery qui accepte soit un élément dom ou son identifiant comme entrée:jquery: tester si la variable d'entrée est un élément dom

function myfunction(myinput){ 
// pseudocode: 
// if (myinput is dom element){ 
// var myID = $(myinput).attr('id'); 
// } else { 
// var myID = myinput; 
// } 

// Do stuff with myID ... 

} 

Question: Comment puis-je savoir si myInput est un dom élément???

+0

Cela a déjà été posée: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you- check-if-a-javascript-object-is-a-dom-object –

Répondre

20

Il est plus facile de faire la vérification dans l'autre sens - vérifier si elle est une chaîne si oui l'utiliser pour obtenir un ID d'autre le traiter comme un nœud DOM/élément et traiter comme si elle était un .

function myfunction(myinput) { 

    var myId; 

    if (typeof myinput == 'string'){ 
     myId = myinput; 
    } else { 
     myId = myinput.id; // myinput.id is enough 
    } 

    // do something 

} 

ou si vous voulez vraiment vérifier contre si elle est HTMLElement alors chaque élément html DOM étend l'interface abstraite HTMLElement. Check MDC pour plus d'informations sur HTMLElement.

... 

    if (myinput instanceof HTMLElement){ 
     myId = myinput.id; // myinput.id is enough 
    } else { 
     myId = myinput; 
    } 

    ... 

En fin de compte, ce n'est pas vraiment important ... votre appel!

Tom

+0

Merci! C'est exactement ce dont j'avais besoin. – moondog

+2

HTMLElement ne fonctionnait pas pour moi dans certains navigateurs (probablement IE8) alors maintenant je vérifie 'nodeType' –

+0

Vous pouvez faire' '' $ (myinput) .length> 0''' pour voir si l'élément existe dans le DOM. – designcise

-2

if(myinput instanceof domElement) alert("Yes");

+4

Non, il n'y a pas de classe comme 'domElement'. – BoltClock

+3

Ce que vous voulez dire est 'Element' ou' Node';) – yckart

6

Vous mettrait en œuvre votre fonction comme ceci:

function myfunction(myinput){ 

if (myinput.nodeType){ 
    var myID = $(myinput).attr('id'); 
} else { 
    var myID = myinput; 
} 

// Do stuff with myID ... 

}

Plus d'informations sur nodeType.

+0

+1 pour cette solution. Le code jQuery l'utilise dans sa fonction isPlainObject pour exclure les nœuds DOM. – sma

0

Je me demande si un ternaire agréable travaillerait, quelque chose comme ça

var myID = $(myInput).attr('id') ? $(myInput).attr('id') : myInput; 
Questions connexes