英文:A链接标记ie下会自动补全href.
En travaillant sur Ajax Link Tracker et MapSurface, j'ai rencontré une incohérence dans la façon dont l'attribut href est récupéré à l'aide des scripts DOM.
L'attribut href est différent des autres attributs d'élément dans le sens où la valeur définie peut être relative au contexte de l'URL de la page. Si vous définissez un lien avec un attribut href relatif
page de test
Le navigateur examinera l'URL actuelle de la page et en déduira une URL absolue pour le lien.
http://www.glenn.jones.net/development/test1.html
C'est la racine du problème, certains navigateurs renvoient le texte de l'attribut et d'autres renvoient l'URL absolue dérivée. Les résultats diffèrent également selon la méthode que vous utilisez pour récupérer l'attribut href. Il existe trois manières courantes d'accéder à un attribut :
lienobj.href;
lienobj['href'];
linkobj.getAttribute('href');
Les méthodes
linkobj.href
et
linkobj[‘href’];
d'accès à l'attribut renvoient systématiquement l'URL absolue dérivée.
Microsoft a essayé de résoudre ce problème en
problème en ajoutant un deuxième paramètre à la méthode getAttribute. Le deuxième paramètre peut être défini sur 0,1 ou 2. Si le paramètre est défini sur 2, la méthode renvoie le texte de l'attribut. Tout autre paramètre renverra l’URL absolue dérivée.
linkobj.getAttribute('href');
linkobj.getAttribute('href',2);
|
|
Dérivé URL absolue |
Texte d'attribut |
IE
lienobj.href;
x
IE
linkobj.getAttribute('href');
x
IE
linkobj.getAttribute('href',2);
x
Gecko
lienobj.href;
x
Gecko
linkobj.getAttribute('href');
x
Gecko
linkobj.getAttribute('href',2);
x
Opéra
lienobj.href;
x
Opéra
linkobj.getAttribute('href');
x
Opéra
linkobj.getAttribute('href',2);
x
Obtenir la page de test des attributs Test sur IE6, Firefox 1.5 et Opera 8.51.
Alors, que doit renvoyer la méthode getAttribute ?
La spécification W3C DOM Level 2 Core qui définit la structure de la méthode getAttribute ne couvre pas ce problème. Ce n’est pas que l’une ou l’autre approche soit bonne ou mauvaise. Sur ce point le cahier des charges est sujet à interprétation.
En tant que codeur, j'aimerais pouvoir accéder aux deux valeurs. La spécification DOM Core doit être mise à jour pour résoudre le problème.
Après un très bon échange avec Jim dans les commentaires ci-dessous, je me corrige. La spécification indique que getAttribute doit renvoyer la valeur de l'attribut, pas l'URL absolue. L'approche de Microsoft est fausse.
Pour le moment, j'utilise la méthode des propriétés d'objet à l'ancienne
linkobj.href
pour renvoyer les URL absolues dérivées. Il fournit les résultats les plus cohérents sur tous les navigateurs.
URL d'intérêtSpécification de base W3C REC DOM niveau 2 pour getAttributeDocumentation Gecko pour getAttributeDocumentation Microsoft pour getAttribute Comme d'habitude, alors que je terminais ce post, j'ai trouvé ce rapport de bug sur le site QuickMode qui aborde le même sujet.
getAttribute HREF est toujours absolu.html