jQuery - 将自定义目录放在所有锚链接之前

时间:2014-07-14 12:26:40

标签: javascript jquery html

是否可以使用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已添加到所有链接。

4 个答案:

答案 0 :(得分:1)

您可以使用:

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

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

答案 1 :(得分:1)

你可以这样做:

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

答案 2 :(得分:0)

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

这个想法非常简单,只需遍历每个锚点,并将foldername附加到每个href。

var $this = $(this);用于选择器缓存,以便jQuery不会从DOM中选择元素两次。

答案 3 :(得分: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

并且regexp应该解析典型的文件夹字符串。我不知道jQuery如何处理这种东西,但这非常有效,因为TreeWalker是原生的,设计得非常好,只能返回你需要的东西。