是否可以使用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
已添加到所有链接。
答案 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)
这个想法非常简单,只需遍历每个锚点,并将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
是原生的,设计得非常好,只能返回你需要的东西。