2014-07-14 21 views
1

是否可以使用jQuery將自定義文件夾名稱放在頁面上所有鏈接的前面?jQuery - 將自定義目錄放置在所有錨鏈接前

例如,如果我有我的網站這些鏈接:

<a href="/user/login">Login</a> 
<a href="/user/register">Register</a> 
<a href="/user/forum">Forum</a> 

這將有可能做的,所以在頁面加載時,它們會自動轉換爲:

<a href="/foldername/user/login">Login</a> 
<a href="/foldername/user/register">Register</a> 
<a href="/foldername/user/forum">Forum</a> 

的變化是/foldername已被添加到所有鏈接。

回答

1

您可以使用:

$('a').each(function(){ 
    $(this).attr('href','/foldername'+$(this).attr('href')); 
}); 

$('a').attr('href', function(_, href) { 
return '/foldername'+href; 
}); 
1

你可以做這樣的事情:

$("a[href^='/']").each(function() { 
    $(this).attr("href", "/foldername" + $(this).attr("href")); 
}); 
+0

2014年最佳查詢。 – mystrdat

0

演示:http://jsfiddle.net/QKVAm/

的想法很簡單,只是迭代通過每個錨點,並將文件夾名稱追加到每個href。

var $this = $(this);用於選擇器緩存,以便jQuery不會從DOM中選擇元素兩次。

0

那麼,你可以走DOM樹和解析所有<a>標籤,並根據它們是否匹配正則表達式來更改它們的href

這是純JavaScript:

var matcher = new RegExp("/^[/a-z]*$/"); 

var filter = { 
    acceptNode: function(node){ 
     if(node.tagName === "a"){ 
      return NodeFilter.FILTER_ACCEPT; 
     } 
    } 
} 

var tree_walker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, filter, false); 

while(tree_walker.nextNode()){ 
    var a_elem = tree_walker.currentNode; 
    var loc = a_elem.getAttribute("href"); 
    if (matcher.test(loc)){ 
     a_elem.setAttribute("href", "/foldername" + loc); 
    } 
} 

document.TreeWalker是DOM內置:MDN

和正則表達式應該分析典型的文件夾的字符串。我不知道jQuery如何處理這種東西,但這是非常有效的,因爲TreeWalker是本地設計,並且設計得很好,只返回您所需要的。

相關問題