使用JQuery从URL中删除“#”号

3

我已经编写了一段脚本,可以从URL中删除#并滚动到特定的

。它适用于普通的URL,例如:

10.0.1.22/dev/pg/blog/all/

但是对于像以下这样的URL,它无法正常工作:

10.0.1.22/dev/pg/search/?tag=a&entity_subtype=blog&entity_type=object&search_type=entities#39531

它没有从URL中删除#,并且滚动也不起作用。

脚本

    jQuery(document).ready(function($) {

    $(".full_view_btn").live('click', function(){
        var divid = $(this).attr('data-id');
        var long_desc = "#inner_descrip" + divid;   
        var short_desc = "#listing_desp" + divid;
        var shw_mre_btn = "#full_view" + divid;

        if($(long_desc).is( ':hidden' )){
            $('.long_desc').hide();
            $('.short_desc').show();
            $(long_desc).show();
            $(short_desc).hide();
            $('.full_view_btn').text('Show more');
            $(shw_mre_btn).text('Show less');
          } else{
              $(long_desc).hide();
              $(short_desc).show();
              $(shw_mre_btn).text('Show more');
          }

        if (location.pathname.replace('/^\//','') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) {
          var target = $(this.hash);
          target = target.length ? target : $('[id=' + this.hash.slice(1) +']');
          if (target.length) {
            $('html,body').animate({
              scrollTop: target.offset().top-60
            }, 500);
                target.parent().find('#highlight_div'+divid).css("box-shadow", "0 0 2px 1px #cccccc");
            setTimeout(function() {
                target.parent().find('#highlight_div'+divid).css("box-shadow", "none");
            }, 1000);
            return false;
          }
        }

    });

});

有没有想法,怎么解决这个问题?我找不到错误在哪里?

1
请创建一个 JSFiddle。 - Pratik Joshi
1
你使用的是哪个浏览器? - ssut
请查看此链接以了解如何使用DOM解析URL:http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - serakfalcon
@RIADev,请创建一个jsfiddle。 - Pratik Joshi
它可以解析URL,以便您可以提取哈希和任何其他相关信息。 - serakfalcon
显示剩余8条评论
1个回答

1
你不能使用jQuery对象来包装哈希字符串,否则你将得到一个空数组,因为jQuery的输入参数应该是选择器。你需要将目标作为由jQuery对象包装的DOM元素以使用像offset这样的方法。
所以你必须更改目标,或者无论什么应该是滚动下去的目标。
var target = $(this.target);

是的,taget.length 显示为 0,但是它如何适用于我问题中的小 URL? - UI Dev
如果目标值设置为0,则不会评估以下条件,而是简单地跳过。 - Martin Surynek
是的,我知道... 我尝试了你的解决方案,但它也不起作用... 是的,在 console.log(target) 中显示选择器 #35166 的 id。 - UI Dev
很难猜测正确的行为,能否发布整个页面? - Martin Surynek
@Martin... 我已经修复了脚本,现在它是101%正确的。我只是改变了我的父级 div,现在它完美地工作了。感谢你的时间。 - UI Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接