2010-09-14 4 views
0

J'essaie de manipuler certaines ancres après le chargement du document pour modifier leur attribut href en utilisant Prototype. Basé sur la classe d'une ancre, son href doit être réécrit pour être utilisé par un logiciel de suivi.Manipuler href d'ancrage basé sur la classe dans le prototype

J'ai piraté certaines choses ensemble mais je n'arrive pas à comprendre pourquoi cela ne marche pas. Il retourne toujours indéfini, peu importe ce que je recherche.

<script type="text/javascript"> 
var elements = $$(".replace"); 
for (el in elements) { 
    el.href = "other_href.html"; 
} 
</script> 
<a href="this_href.html" class="replace">Link</a> 

Quand je alert(el) dans la boucle, il retourne soit indéfini ou (quand je cherche a.replace un nombre extraordinaire d'éléments qui n'existent même pas sur ma page.

Où est mon erreur de pensée dans ? ici

Répondre

2

Untested:

<script type="text/javascript"> 
document.observe('dom:loaded', function() { 
    $$(".replace").each(function(a) { 
     a.writeAttribute('href', 'other_href.html'); 
    }); 
}); 
</script> 
<a href="this_href.html" class="replace">Link</a> 

Je devine que votre JavaScript a été chargé et exécuté avant que le HTML était Suppos ed à manipuler a été chargé par le navigateur. Il ne peut pas manipuler ce qui n'existe pas encore. C'est là que l'observation des événements est utile. Dans ce cas, nous attendons que le DOM termine le chargement, mais avant que la page ne soit rendue par le navigateur, pour effectuer nos changements.

J'ai également profité de la fonctionnalité each() de Prototype. C'est un excellent moyen de parcourir les tableaux et les énumérables. Et writeAttribute() est une bonne façon de modifier les attributs des éléments.

Questions connexes