Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery重写href_Jquery_Ajax_Url_Rewrite - Fatal编程技术网

jQuery重写href

jQuery重写href,jquery,ajax,url,rewrite,Jquery,Ajax,Url,Rewrite,我有一个onclick函数,我想在href值中添加一个锚点。我不想更改URL,因为我需要该站点仍能为没有javascript/用于SEO目的的用户运行。下面是我尝试使用的(其他很多东西): jQuery('a[rel=ajax]')。单击(函数(){ jQuery(this.attr('href','/#'+jQuery('a')); }); 原始链接如下所示: http://www.mysite.com/PopularTags/ http://www.mysite.com/PopularTag

我有一个onclick函数,我想在href值中添加一个锚点。我不想更改URL,因为我需要该站点仍能为没有javascript/用于SEO目的的用户运行。下面是我尝试使用的(其他很多东西):

jQuery('a[rel=ajax]')。单击(函数(){ jQuery(this.attr('href','/#'+jQuery('a')); }); 原始链接如下所示:

http://www.mysite.com/PopularTags/ http://www.mysite.com/PopularTags/ URL重写应如下所示,以便AJAX能够工作:

http://www.mysite.com/#PopularTags http://www.mysite.com/#PopularTags 通过将链接名称值设置为与href相同的值,我可以使一些URL正常工作,但对于包含以下子节的链接无效:

http://www.mysite.com/Artist/BandName/ http://www.mysite.com/Artist/BandName/
所以不太确定。谢谢你的帮助。

我相信

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

我会做好的。读作:在页面加载时,循环浏览所有链接,并将它们的href属性替换为#{old href}。

这取决于您如何在HTML中编码链接。如果您正在链接到
http://www.mysite.com/PopularTags/
使用此选项:

<a href="/PopularTags/">Popular Tags</a>
这将产生以下HTML:

<a href="/#PopularTags">Popular Tags</a>


请注意,我们可以设置
this.href
而不是
$(this.attr('href')
,但我们仍然需要后者来获取实际的
href
属性
this.href
始终保存完整的URI,包括协议、域名等,这在本例中是不需要的。

我建议使用正则表达式,如

$('a[rel=ajax]').click(function(){
  $(this).attr('href', function(){
    this.href = this.href.replace(/\/$/, "");
    return(this.href.replace(/(.*\/)/, "$1#"));
  });
});

子节链接的重写应该是什么样子的?您可以设置
this.href
,而不是
$(this.attr('href')
)。原生JavaScript ftw!(您仍然需要
$(this).attr('href')
来获取实际的
href
属性。)这添加了“#”符号,但原始链接仍然出现在后面。最终的结果是这样的:“这是一个完美的解决方案。它允许我保留所有原始的url,只有相关的ajax url在单击时被更改。最终的结果是这样的。正是我需要的。希望它将为我的所有其他链接工作。这将如何处理这样的url:“?我刚刚意识到,如果你单击一个已经处于活动状态的链接,它会不断添加锚。。那么,如果已经存在锚定,我如何防止它添加锚定呢?@brandon14_99不要在每次单击链接时更改
href
属性,只在加载文档时更改一次。用
.click()
替换
。each()
应该可以工作。Mathias是正确的,替换。单击.each并将其放入$(document).ready()。如果href在url的前后没有斜杠,这会有点小问题,否则会是一个很好的解决方案。@brandon14\u 99在你的问题中,你说:“原始链接如下所示:
http://www.mysite.com/PopularTags/
“所以我假设你在整个网站上都是一致的,所有链接都是这样编码的。如果你想要斜杠的灵活性,可以使用正则表达式。
<a href="/#PopularTags">Popular Tags</a>
$('a[rel=ajax]').click(function(){
  $(this).attr('href', function(){
    this.href = this.href.replace(/\/$/, "");
    return(this.href.replace(/(.*\/)/, "$1#"));
  });
});