我在使用jquery中的冒号处理ID时遇到问题。如果ID中有冒号,则平滑滚动不起作用。
HTML
<a href="#fn:1">Go to Footnote 1</a>
<div id="fn:1>Lorem ipsum Bla Bla</div>
JS
var $root = $('html, body');
$('a').click(function() {
var href = $.attr(this, 'href');
$root.animate({
scrollTop: $(href).offset().top
}, 400, function () {
window.location.hash = href;
});
return false;
});
答案 0 :(得分:1)
这样做:
$(function(){
$('[href]').each(function(){
$(this).attr('href',$(this).attr('href').replace(/:/g,""));
});
});
这将从所有:
href
答案 1 :(得分:0)
试试这个。
var $root = $('html, body');
$('a').click(function() {
var href = $.attr(this, 'href'),
href = href.split(':'),
href = href.join('\\:');
alert(href)
$root.animate({
scrollTop: $(href).offset().top
}, 400, function () {
window.location.hash = href;
});
return false;
});
答案 2 :(得分:0)
您需要将#
替换为\\#
,将:
替换为\\:
以取消该角色并使其正常工作:
var $root = $('html, body');
$('a').click(function() {
var href = $.attr(this, 'href').replace(/:/g,"\\\\:");
href = href.replace(/#/,"\\\\#");
$root.animate({
scrollTop: $(href).offset().top
}, 400, function () {
window.location.hash = href;
});
return false;
});
详细了解如何转义字符here