2016-01-03 20 views
1

我正在更新这个超级旧的医疗网站,并试图找出一种方法来处理数百个hrefs,每个hrefs都有一个文件加上一个#散列值,就像这样。 ..jquery strip href path(但保留散列值)

<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('#'); 
}); 

呼。

回答

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

+0

非常感谢;我已经接受了这个答案,因为它看起来比另一个更简单,这也起到了作用。 –

+0

更好的做它在页面本身无论如何我认为...然后链接可以复制如果需要 – charlietfl

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>