2010-06-16 64 views
2

這裏是HTML:jQuery的更新鏈接

<a href="http://site.com/any/different/folders/picture_name.jpg">Go and win</a> 
<a href="http://site.com/not/similar/links/some_other_name.png">Go and win</a> 

如何href屬性添加一些文字最後"/"後(picture_name.jpg之前)的每一個環節?

腳本應該給予這樣的:

<a href="http://site.com/any/different/folders/user_picture_name.jpg">Go and win</a> 
<a href="http://site.com/not/similar/links/user_some_other_name.png">Go and win</a> 

這裏user_加入。

每個鏈接是var img_link

可以有鏈接的任何長度。

+0

是,鏈路可以是不同的 – Happy 2010-06-16 21:40:46

+0

這就是爲什麼我們如果你想有一個非正則表達式版本搜索最後一個「/」 – Happy 2010-06-16 21:42:46

+0

向下滾動了一下。 ; o) – user113716 2010-06-16 21:52:05

回答

2

尼斯和清潔。沒有拆分,沒有數組,沒有正則表達式。 :O)

測試在這裏:http://jsfiddle.net/Pjdtm/

var index = img_link.lastIndexOf('/') + 1; 

     // "result" now stores the new href. 
    var result = img_link.substr(0,index) + 'user_' + img_link.substr(index); 
+0

+1 。另外,我相信這是最有效的實現。你可能想要將你的jQuery選擇改爲'$('a [href]')',以去除一些奇怪的邊緣情況。 – Senseful 2010-06-16 21:54:18

+0

@eagle - 你的意思是jsFiddle ?是的,這太棒了。:o) – user113716 2010-06-16 21:55:44

+0

@eagle - 沒有看到你的編輯。是的,選擇器是非常通用的。不知道這是否更有效(3個函數調用),但比正則表達式更漂亮。隨着Happy在您的回答下的最後評論,我不確定我們是否在正確的軌道上。 – user113716 2010-06-16 22:11:29

3

所以我認爲最好的解決方案會利用拼接和連接。

jQuery的實施例

$("a").each(function(){ 
var arr = $(this).attr("href").split("/") 
arr[arr.length-1] = "_user" + arr[arr.length-1]; 
$(this).attr("href",arr.join("/")); 
}); 
+0

可能的,但有一些純正則表達式的方法可能*很多*更快(更短)。但是,這段代碼更容易理解。 – MvanGeest 2010-06-16 21:44:07

+0

我發現一個簡單易懂的正則表達式解決方案,但這可能只是我。 – Senseful 2010-06-16 21:46:35

+0

href已經放置在「var img_link」 – Happy 2010-06-16 21:51:42

7

此解決方案使用regular expressions具有優異在簡單字符串操作如此:

$('a[href]').each(function() { 
    var img_link = $(this).attr('href'); 
    $(this).attr('href', img_link.replace(/([^\/]+)$/, "user_$1")); 
}); 

更新使用img_link由OP的要求。

如果你已經有了img_link變量和自己each()循環,只需使用函數內的一條線,即:

$(this).attr('href', img_link.replace(/([^\/]+)$/, "user_$1")); 
+0

不錯,比我的確定的答案更好 – Shawn 2010-06-16 21:42:48

+0

+1幾乎完成了寫一些非常相似的東西。 – MvanGeest 2010-06-16 21:42:59

+0

href已經放在「var img_link」中,你可以爲它添加代碼嗎? – Happy 2010-06-16 21:47:57

1

這裏有一種方法。使用的href屬性下面的正則表達式:

(http://.+/(?=.+"))(.+) 

這將分別匹配http://site.com/not/similar/links/folders/user_picture_name.jpg。然後,您可以將兩個匹配與中間附加的文本組合在一起。

1

你可以通過 var hrefText = jQuery('a').attr('href'); 屬性,那麼你可以修改hrefText爲:

hrefText = hrefText.substr(0,hrefText.lastIndexOf('/'))+'user_'+hrefText.substr(hrefText.lastIndexOf('/')),hrefText.length); //do this in each statement ,然後重新設置該屬性。

jQuery('a').attr(hrefText);

說了這麼多,如果你有鏈接數,你不應該去一個JavaScript方式