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

时间:2014-04-11 05:58:41

标签: javascript jquery hyperlink colon

我在使用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;
});

3 个答案:

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

Demo Fiddle

答案 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