在JavaScript或jQuery中替换href属性中的冒号

biswetbf  于 2023-01-25  发布在  jQuery
关注(0)|答案(3)|浏览(143)

我在jquery中处理带有冒号的ID时遇到了问题。如果ID中有冒号,平滑滚动就不起作用了。

超文本标记语言

<a href="#fn:1">Go to Footnote 1</a>

<div id="fn:1>Lorem ipsum Bla Bla</div>

苏丹

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;
});
gmxoilav

gmxoilav1#

请执行以下操作:

$(function(){
    $('[href]').each(function(){
        $(this).attr('href',$(this).attr('href').replace(/:/g,""));
    });
});

这将从所有href中删除:

guicsvcw

guicsvcw2#

试试这个。

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;
});

Demo Fiddle

drkbr07n

drkbr07n3#

您需要将#替换为\\#,将:替换为\\:,以转义字符并使其正常工作:

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;
});

在此处查看有关转义字符的详细信息

相关问题