2010-10-19 47 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

相關問題