11548 sujets

JavaScript, DOM et API Web HTML5

C'est pas directement ce que tu recherches, mais j'ai lu ça hier http://www.nczonline.net/blog/2010/07/27/determining-if-an-object-property-exists/

Voilà un résumé du code

var person = {
    name: "Nicholas"
};

alert(person.name);        //"Nicholas"
alert(person.toString());  //"[object Object]"

alert(person2.name);    //"Nicholas"
alert(person3.name);    //"Nicholas"

person2.name = "Adam";

alert(person2.name);    //"Adam"
alert(person3.name);    //"Nicholas"


delete person2.name;

alert(person2.name);    //"Nicholas"

//doesn't accurately test for existence but if its a truly value
if (person.name){
    //yay! property exists!
}

//http://11heavens.com/falsy-and-truthy-in-javascript
//truly value => non-zero, NaN, true, and not null or undefined

alert(person.hasOwnProperty("name"));   //true
alert(person2.hasOwnProperty("name"));    //false

person2.name = "Adam";

alert(person2.hasOwnProperty("name"));    //true

delete person2.name;

alert(person2.hasOwnProperty("name"));    //false

if ("name" in person){
    //property exists
}

Je passe par une détection du navigateur. IE6/7 d'un coté (getAttribute), les autres de l'autre (hasAttribute+getAttribute).
Bonjour !
MacIntoc a écrit :
Je passe par une détection du navigateur. IE6/7 d'un coté (getAttribute), les autres de l'autre (hasAttribute+getAttribute).

Et tu utilises des silex pour allumer tes cigarettes ? Smiley cligne

Dans 99% des cas, on peut se passer de la détection de navigateur !

Pour répondre à ta question, _sacapuss, tu peux regarder ici : http://forum.alsacreations.com/topic-5-49743-1-IE-ne-supporte-pas-typeof-.html#p346843

Ou en plus court :
function hasAttr(el, name) {
  return node.hasAttribute ? node.hasAttribute(name) : !!node.getAttributeNode(attrib);
}

Comme je le disais dans le sujet vers lequel je pointe, la plupart du temps un test simple sur la valeur de l'attribut suffit.
if (el.href) {
  // href est défini et ne correspond pas à la chaîne vide
}


<edit>Je viens de m'apercevoir que l'autre sujet était du même auteur...

Sinon, il y a aussi jQuery : http://api.jquery.com/attr/
Modifié par Julien Royer (06 Aug 2010 - 11:59)
Julien Royer a écrit :
Et tu utilises des silex pour allumer tes cigarettes ? Smiley cligne

En fait, j'ai jamais programmé pour IE6 et ça fait un moment que j'ai abandonné IE7/8 Smiley cligne
Mais si je devais reprendre, je préfère passer par une détection. D'une part, j'ai pas tout à fait la même méthode de programmation avec JavaScript qu'avec JScript et d'autre part j'ai du mal à me faire à l'idée de devoir pourrir mon code à cause d'un bâtard mal née et de sa progéniture décadente (déjà qu'Opera me prend parfois bien le choux avec son implémentation trop strict de DOM au détriment de JS).


Oups, pardon, ça m'a échappé Smiley scotch
Modifié par MacIntoc (06 Aug 2010 - 15:56)
MacIntoc a écrit :
En fait, j'ai jamais programmé pour IE6 et ça fait un moment que j'ai abandonné IE7/8 Smiley cligne
Mais si je devais reprendre, je préfère passer par une détection. D'une part, j'ai pas tout à fait la même méthode de programmation avec JavaScript qu'avec JScript et d'autre part j'ai du mal à me faire à l'idée de devoir pourrir mon code à cause d'un bâtard mal née et de sa progéniture décadente (déjà qu'Opera me prend parfois bien le choux avec son implémentation trop strict de DOM au détriment de JS).

Une détection de navigateur ajoute dans la plupart des cas beaucoup plus de code qu'une détection de fonctionnalité, et est nettement plus coûteuse en terme de maintenance.
Absolument, c'est bien pour ça que j'ai abandonné IE ^^
En plus, vu que IE7 ne supporte pas la modification des prototypes DOM, que IE8 ne gère pas le polymorphisme et que je m'appuies beaucoup sur ces 2 méthodes, j'avais de toute façon 2 codes différents qui n'avaient parfois rien à voir. La simplicité de l'un des codes compensait un peu la complexité d'un code universel.
Après, j'ai l'avantage de développer des applications internes et d'être dans une boite où la plupart des utilisateurs ne comprennent pas le concept de navigateur ni pourquoi Google est un e bleu dans Windows et un g avec plein de couleur dans Google.
Modifié par MacIntoc (06 Aug 2010 - 17:55)