jquery strip href path(但保持哈希值)

时间:2016-01-03 21:16:16

标签: jquery hash

我正在更新这个超级旧的医疗网站,并试图找出一种方法来处理数百个hrefs,每个hrefs都有一个文件加上#hash值,就像这样......

<a href="mind.html#cretinism" target="_top">CRETINISM</a>
<a href="brain.html#delirium" target="_top">DELIRIUM</a>
<a href="body-mind.html#dementia" target="_top">DEMENTIA</a>
<a href="body.html#emotions" target="_top">EMOTIONS</a>
<a href="chem.html#fears" target="_top">FEARS</a>

我要做的是保持哈希值,并删除文档,请参阅。因此,我最终想要的是:

<a href="#cretinism" target="_top">CRETINISM</a>
<a href="#delirium" target="_top">DELIRIUM</a>
<a href="#dementia" target="_top">DEMENTIA</a>
<a href="#emotions" target="_top">EMOTIONS</a>
<a href="#fears" target="_top">FEARS</a>

或者,可选地,为了使其成为onclick,它会忽略文档并仅响应哈希值。如,

// pseudo code, obviously
$(document).on('click', 'a', function(e){ 
    e.preventDefault();
    $(this).attr('href').sliceOffEveryCharBeforeThe('#');
});

呼。

2 个答案:

答案 0 :(得分:1)

这对于jQuery来说相当简单,尽管最好的解决方案是尽可能在服务器上进行调整。

// loop through all "a" in page  
$('a').attr('href', function(_, oldHref){
    // if it has a hash use that, if not use old href
    return this.hash ? this.hash : oldHref;
});

DEMO

答案 1 :(得分:0)

我的建议是:

$(document).on('click', 'a', function(e){
  e.preventDefault();
  var obj = $(this);
  var newvalue = obj.attr('href').replace(/[^#]*/, '');
  obj.attr('href', newvalue);
  $('#result').text(this.outerHTML);
});
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>

<a href="mind.html#cretinism" target="_top">CRETINISM</a>
<a href="brain.html#delirium" target="_top">DELIRIUM</a>
<a href="body-mind.html#dementia" target="_top">DEMENTIA</a>
<a href="body.html#emotions" target="_top">EMOTIONS</a>
<a href="chem.html#fears" target="_top">FEARS</a>

<p id="result"></p>