Question

J'ai découvert aujourd'hui un comportement étrange dans la mise en oeuvre par IE8 de la propriété 'options' de l'élément de sélection DOM.

Étant donné le code HTML suivant:

<select id="sel"><option value="val">An option</option></select>

Et le javascript:

var sel = document.getElementById('sel');
alert(sel === sel.options); //alerts 'true' in IE8

Évidemment, l’intelligent collègue qui a écrit l’implémentation select sur IE8 a écrit un indexeur sur l’élément select, puis s’est exposé comme sa propre propriété 'options' à JavaScript.

Ma question est : cette fonctionnalité est-elle attendue, conformément aux spécifications du langage JavaScript? Est-ce un bug connu? Devrais-je continuer à traiter la propriété 'options' comme un objet plutôt que comme un tableau?

Ce n'est pas ainsi que l'élément Select DOM se comporte sous Firefox 3.5, Chrome 1.0 ou Safari 3.1, où la propriété "options" est exposée sous la forme d'un tableau JavaScript ...

Pour référence, je suis tombé sur cette information en transmettant la propriété "options" au constructeur jQuery afin d'envelopper ses éléments. Plutôt que le résultat attendu d'un objet jQuery avec des éléments X (comme cela s'est produit avec Firefox, Chrome et Safari), un objet jQuery avec 1 élément (l'élément select lui-même) m'a été renvoyé.

Était-ce utile?

La solution

Tout d’abord, cela n’est pas lié au langage JavaScript, mais au DOM:)

Nitpicking mis à part, DOM L2, par exemple, définit HTMLSelectElement en tant qu'objet ayant la propriété options . Cette propriété est définie comme étant du type HTMLOptionsCollection et représente - "La collection d'éléments OPTION contenus dans cet élément."

Maintenant, pour citer HTMLOptionsCollection :

  

Une HTMLOptionsCollection est une liste de   noeuds représentant l'option HTML   élément. Un nœud individuel peut être   accessible soit par index ordinal ou   le nom du nœud ou ses attributs.

     

Remarque: les collections du domaine HTML HTML sont   supposé être en direct ce qui signifie qu'ils   sont automatiquement mis à jour lorsque le   le document sous-jacent est modifié.

Techniquement, rien n'empêche HTMLSelectElement d'être égal à son HTMLOptionsCollection (au moins dans les spécifications DOM L2). L'implémentation est entièrement conforme tant qu'elle correspond au comportement standard (c'est-à-dire que les éléments sont accessibles par index ou nom / id et propriétés / méthodes d'interface - tels que élément et longueur - sont implémentés comme spécifié).

Franchement, je ne vois pas pourquoi vous vous soucieriez de cette particularité. Si accéder aux éléments par index / nom fonctionne, peu importe ce que options est égal à. Comme toujours, le mieux est de concevoir des scripts conformes aux normes (et de ne contourner que les lacunes identifiées).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top