2010-10-19 25 views
0

J'ai fini et fait cela à la main, mais je pensais que cela pourrait être fait beaucoup plus rapidement avec un peu de jquery.Obtenez le href du frère précédent et mettre à jour le href de l'élément actuel

J'ai une table avec des douzaines de lignes d'exemple ci-dessous. Ce que je voudrais faire est de trouver les frères et sœurs précédents du <a href="#">, récupérer leur URL, changer le type de fichier en .doc et postuler.

<tr id="node-20" class="child-of-node-19"> 
     <td>Tips</td> 
     <td> 
     <a href="docs/Interview-Info.pdf"> 
      <img width="20" height="20" src="/images/icons/icon-pdf.gif" alt="PDF" /> 
     </a> 
     <a href="#"> 
      <img width="20" height="20" src="/images/icons/icon-word.gif" alt="Microsoft Word" /> 
     </a> 
     </td> 
    </tr> 

Une fois le javascript terminé, la source générée ressemblerait à ceci.

<tr id="node-20" class="child-of-node-19"> 
     <td>Tips</td> 
     <td> 
     <a href="docs/Interview-Info.pdf"> 
      <img width="20" height="20" src="/images/icons/icon-pdf.gif" alt="PDF" /> 
     </a> 
     <a href="docs/Interview-Info.doc"> 
      <img width="20" height="20" src="/images/icons/icon-word.gif" alt="Microsoft Word" /> 
     </a> 
     </td> 
</tr> 

Ma dernière variation était:

$('a+a[href="#"]').attr('href',$('a+a[href="#"]').prev().attr('href')); 

qui finit par obtenir la première URL, et de l'appliquer à tous les <a href="#">. Donc Interview-Info.pdf est appliqué à tous ces liens.

Ceci est aussi loin que je suis en raison de contraintes de temps. Y at-il un simple était de le faire?

Répondre

2

.attr() fonctionne uniquement avec le premier élément de l'ensemble, de sorte que vous voulez probablement itérer sur votre liste et l'appliquer à chaque:

$('a+a[href="#"]').each(function() { 
    $(this).attr('href', $(this).prev().attr('href').replace(/\.[a-z0-9]+$/i, '.doc')); 
}); 
+0

Merci! Cela a fait le tour parfaitement. J'avais essayé une variation avec "ceci", mais j'utilisais la mauvaise syntaxe – Fireflight

0

vous y êtes presque, essayez ceci:

$('a+a[href="#"]').attr('href',$('a+a[href="#"]').prev().attr('href').replace(/.pdf/gi, ".doc")); 
+1

Cela ne fonctionnera pas pour plusieurs lignes –