2010-11-10 7 views
23

Je songe à utiliser des attributs personnalisés dans Jquery pour éviter d'utiliser des attributs de classe ou d'identifiant, afin de ne pas interférer avec les concepteurs html.Attributs personnalisés Jquery

Compte tenu de cette idée, le code HTML doit être des morceaux comme:

<ul Jquery="CommonUl"> 
    <li Jquery="CommonLi"></li>  
    <li Jquery="CommonLi"></li> 
    <li Jquery="CommonLi"></li> 
    <li Jquery="CommonLi"></li> 
    <li Jquery="CommonLi"></li> 
</ul> 
  • Pensez-vous que cela est une bonne approche?

  • Comment jugez vous le W3C de validation de ces attributs personnalisés?

  • Connaissez-vous un moyen de programmer avec Jquery sans interférer avec le travail des concepteurs html? A propos de la performance, je suppose qu'avec les attributs de classe ou les ids, les sélecteurs jquery sont plus rapides que l'utilisation d'un attribut personnalisé et de fonctions de filtrage telles que "contains, etc ...". Est-ce correct?

+2

Mon avis sur la validation du W3C est que ce va échouer. :) Connaissez-vous '.data()' de jQuery? (Cela n'aidera pas si vous avez besoin de stocker les données directement dans le balisage, cependant) –

+2

En fait, @Pekka, avec jQuery 1.4.3! Un appel à '.data (" foo ")' ramassera la valeur de 'data-foo =" valeur "' sur un élément. – Pointy

+1

@Pointy ouais, mais 'data- *' n'est pas valide en HTML 4 ... –

Répondre

81

Vous pouvez le faire, utilisez data- attributes bien (part of the HTML5 specification), comme ceci:

<li data-something="CommonLi"></li> 

jQuery a même un support intégré pour ces derniers dans 1.4.3+, par exemple:

$("li").data("something") //"CommonLi" 

Pour vos questions:

  • Ils valident si elle est HTML5 - mais ne pause quoi que ce soit dans HTML4
  • Cela ne devrait pas interférer avec le concepteur, mais cela dépendra de qui concepteur
  • Si vous êtes Récupérer à partir d'un élément, la performance est la même que tout autre attribut
+0

Cela sera cependant invalide dans HTML 4, donc s'il est important de supporter les navigateurs plus anciens et d'être valide pour le W3C, ce n'est malheureusement pas une option. Si ce n'est pas un problème, c'est la meilleure façon d'aller –

+1

@Pekka - Je suis d'accord, mais être valide à 100% n'est pas aussi important que d'être 100% fonctionnel ... s'il n'y avait pas un écart dans la spécification où ces étaient nécessaires, ils n'auraient pas été ajoutés en HTML5 :) Upping le HTML5 DOCTYPE devrait prendre soin des deux côtés ici. –

+0

Salut, merci d'avance ... Bonne réponse. La chose est que nous n'utiliserons probablement pas HTML 5 ne sera pas fini avant 2012. – Jose3d

1

Je vous recommande personnellement d'utiliser la méthode jquery intégrée pour enregistrer des données avec chaque élément. Voici l'extrait de code pour la sauvegarde des données:

$("ul").data("CommonUl"); 
$("li").data("CommonLi"); 
+0

Tout d'abord, merci ... Je ne savais pas cette façon de stocker des données pour chaque élément. La chose est que probablement je n'aurai pas besoin de dire quelque chose comme: "tous les ul et li auront les données suivantes attachées", à la place il y aura quelques éléments spécifiques (peut-être dans la page il y a 4 ul, et je voudrais appliquer ceci à un et non par la position) ... Cordialement. – Jose3d

8

si vous prévoyez d'avoir plusieurs attributs, je suggère de définir un attribut unique, des espaces de noms, par exemple

<li data-yourapp>...</li> 

et utiliser cet attribut comme un Hashtable

$("li").data("yourapp", { 
    points : 2000, 
    life : 1, 
    weapons : { 
     firegun : 0, 
     missiles : 12 
    } 
}); 

de cette façon vous permettra de réduire l'accès de l'élément et vous récupérer toutes les données personnalisées une fois

+0

Nice ... je ne savais pas que vous pouviez le faire. – Adam

Questions connexes