2014-06-20 3 views
0

Je me demande pourquoi les écrans d'alerte suivants tandis que le classList est une chaîne vide:classList vide retourne vrai

<p id="p">Hello, world!</p> 
<button id="b">Button</button> 
<script> 
    document.getElementById('b').onclick = function() { 
     if (document.getElementById('p').classList) { 
      alert('Full!'); 
     } 
    }; 
</script> 

DEMO

Répondre

0

Parce que classList est un objet de type DOMTokenList avec des méthodes redéfinies comme toString() (c'est pourquoi alert(document.getElementById('p').classList) montre une chaîne vide), etc.

Ainsi, lorsque vous exécutez if (document.getElementById('p').classList) { vous avez réellement smth comme if (Object) { et dans ce cas passera. Pour assurer - voir typeof(document.getElementById('p').classList) - ce sera collection. Essayez également d'écrire dans la console document.getElementById('p').classList.__proto__ - vous verrez DOMTokenList objet qui a un Prototype de lien vers le DOMTokenList contructor (document.getElementById('p').classList.__proto__.constructor).

En savoir plus sur DOMTokenList - https://developer.mozilla.org/en/docs/Web/API/DOMTokenList

1

classList existe, mais n'a pas de longueur. Essayez plutôt avec document.getElementById('p').classList.length.

+0

Si 'classList' existe comme un objet régulier JavaScript, alors pourquoi [ce] (http://jsfiddle.net/Mori/d3mjv/1/) alerte vide? comparer avec [ceci] (http://jsfiddle.net/Mori/d3mjv/2/). – Mori