2010-10-19 46 views
0

我已经完成并手工完成了这个任务,但我认为这可以通过一些jquery快速完成。获取前一个兄弟的href并更新当前项的href

我有一张桌子,下面有几十个示例行。我想要做的是找到<a href="#">的以前的兄弟姐妹,抓住他们的URL,将文件类型更改为.doc并应用。

<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> 

所以一旦javascript完成,生成的源代码将如下所示。

<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> 

我最后的变动是:

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

这最终得到的第一个网址,并将其应用到所有的<a href="#">。因此Interview-Info.pdf适用于所有这些链接。

这是因为时间有限而得到的。有一个简单的做法吗?

回答

2

.attr()只适用于在集合的第一个元素,所以你可能要遍历列表并将其应用到每个:

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

谢谢!这完美地完成了这个技巧。我曾尝试过使用“this”的变体,但我使用了错误的语法 – Fireflight 2010-10-21 14:33:04

0

你几乎没有,试试这个:

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

这不适用于多行 – 2010-10-19 19:09:42

相关问题