À L'Aide De L'Objet.le prototype.toString.call() pour retourner le type d'objet avec Javascript ne fonctionne pas sous IE
J'espère que je peux demander à ce d'une manière compréhensible...
Dans l'ensemble, je suis en train d'essayer de déterminer quel type d'objet, je suis actuellement en train de traiter avec.
Je suis de la création d'une collection (HTML est de donner l'exemple, non littéral) et j'ai besoin de filtre de ma collection de certains éléments, par exemple:
<div id="tabContentWrap">
<div id="tab">
<a href="http://somelink">Link Element</a><img src="img.jpg" alt="img" />
<select id="my_select"><option value="1">1</option></select>
</div>
</div>
function getFilteredElements() {
var tabContent = getElementsByClass("tabContentWrap", document.getElementById(tabWrapId), "div");
for (var j = 0; j < tabContent.length; j++){
tabContentLinks = tabContent[j].getElementsByTagName('*');
for (var k = 0; k < tabContentLinks.length; k++){
//Here i attempt to filter the collection
if (tabContentLinks[k] == '[object HTMLSelectElement]') {
alert("found select list");
}
}
}
}
Qui fonctionne très bien sous Mozilla mais pas sous Internet Explorer 8, tabContentLinks[k]
retourne [object]
au lieu de [object 'ObjectType']
Donc j'ai étudié et découvert que vous pouvez utiliser Object.prototype.toString.call(object)
pour obtenir le type d'objet, à nouveau, qui fonctionne très bien sous Mozilla mais renvoie [object Object]
dans IE8...
J'appelle
get_type(tabContentsLink[k]);
qui exécute la fonction suivante:
function get_type(thing){
if (thing === null) return "[object Null]";
//special case
return Object.prototype.toString.call(thing);
}
Mais cela renvoie [object Object]
Ne Object.prototype.toString.call()
jamais de retour le type de l'objet dans IE ou suis-je très loin et les aboiements d'un lampadaire au lieu d'un arbre?
OriginalL'auteur dpmguise | 2010-11-19
Vous devez vous connecter pour publier un commentaire.
Eh bien, tout d'abord je tiens à vous dire que
Object.prototype.toString
renvoie la valeur de l'objet interne[[Class]]
de propriété, il n'est pas vraiment un Type.La valeur de cette propriété représente la spécification de classification définis par d'un objet (plus d'info ici).
Javascript a seulement 6 types de langue: Objet, String, Number, Boolean, Null et Undefined, c'est tout.
La valeur de la
[[Class]]
intérieur de la propriété pour les objets hôte -comme des éléments du DOM - peut être rien, il est complètement dépend de l'implémentation, sur les objets intégrés est sûr à utiliser-sauf à quelques exceptions près dans IE @Alex l'a souligné dans l'article lié à sa réponse.Vous travaillez avec des éléments du DOM, et que vous voulez comprendre à quel type de nœud, il est, ma suggestion est d'utiliser simplement le
nodeName
propriété (veuillez éviter d'utilisertagName
).La
nodeName
propriété contient le nom du nœud en face, en majuscules, donc vous pouvez l'utiliser comme ceci:Merci!, maintenant que je vous vois, peut-être que demain, je vais mettre à jour ma réponse à votre question, peu de choses ont changé sur la spec., et je vais reformuler certaines parties de celui-ci 🙂
Vous êtes les bienvenus! Je suis heureux de vous aider 🙂
PS: N'oubliez pas de déclarer votre
tabContentLinks
variable. Si vous venez de faire une mission, et la variable n'est pas trouvé à l'extérieur sur le champ d'application, il deviendra une propriété de l'objet global (un implicite global), c'est d'ailleurs interdits sur les nouveaux ECMAScript 5 Mode Strict, unReferenceError
exception est levée sur ce genre de non déclarées affectations -toujours utiliservar
:)...Quel est votre objection à
tagName
?OriginalL'auteur CMS
Plutôt que de recréer l'ensemble des débats et des solutions possibles, je vais simplement vous indiquer à un post de blog qui traite de cette question précise.
dans IE9 beta ce n'est fixé. Pour l'instant, oui, c'est ce que je pourrais aller à ce sujet, mais il peut y avoir de meilleures façons.
Pouah.. les joies... merci 🙂
en effet. ..Er..amusant? avec que. 🙂
Hmm, ce blog est au sujet d'un problème spécifique,
Object.prototype.toString
avec Tableau d'objets à partir d'autres images, l'OP problème, c'est concernant le fait que l'Hôte des objets comme des éléments du DOM - dans IE<9 n'ont pas défini une valeur spéciale pour leur[[Class]]
intérieur de la propriété...OriginalL'auteur Alex
Je crois que IE retour de types de données simples, mais tout le reste est juste un objet. C'est un navigateur limitation. Je ne sais pas si IE9 est l'amélioration de la situation, mais qui ne serait probablement pas vous aider de toute façon.
OriginalL'auteur harley.333
Je n'ai pas IE à portée de main, mais la bonne façon de Firefox est d'utiliser
object.constructor.name
(object.constructor
être le constructeur de l'objet,.name
étant le nom de la fonction).Mais alors, aussi,
Ah bien. C'est bien dommage.
OriginalL'auteur Chris Morgan