2

长话短说,我正在开发一个网络应用程序并在其中使用 AJAX。我试图在单击时禁用链接的默认操作,将哈希值附加到链接,然后从 url 中删除“#”。

我遇到的问题是,尽管相应地附加了哈希值,但子字符串方法并没有提取“#”,而是提取了它后面的字母.....

这是我的代码。PS,我在那里留下了我的评论,所以你得到了我试图去的地方,所以我不知道......我的逻辑或设置可能是错误的......

$(document).ready(function(){

    //app vars
    var mainHash = "index";
    var menuBtn = $('.leftButton');
    //~~~~~~load the index page at first go.
    loadPage();

    //~~~~~~~~~~~~~~~~~~~~~~~~~~~menu show/hide
    menuBtn.click( function(){
        $('#menu').toggleClass();   
    });


    //Menu items on click , disable link default actions.
    $('#menu a').click( hijackLinks );


    //~~~~~~~~~~~~~~~~~~~~~~~~~~~functions for mobile index load AND hijacking app links to AJAX links.
    function loadPage(url){
        if( url == undefined){
            $('#contentHere').load('index.html #content', hijackLinks);
                window.location.hash = mainHash;
        } else {
            $('#contentHere').load(url + '#content', hijackLinks ); 
        }
    }


    function hijackLinks(e){
        var url = e.target.href;
        e.preventDefault();
        loadPage(e.target.href);
        window.location.hash = $(this).attr("href").substring(1);
    }
});

我想要的是从网址中删除“#”。我做错了什么,我没有看到/理解什么?

我尝试了 substring/substr 等,并且两者都做同样的事情,无论我选择将什么数字插入到子字符串参数中,它们都会删除除“#”之外的所有内容,哈哈。

提前致谢。

4

1 回答 1

1

好吧,你并没有真正改变链接本身,你只是改变了window.location.hash,并且哈希总是在开头有一个“#”。

为了更改整个 url(并删除“#”),您需要做的是操纵浏览器历史记录

尽管您应该知道它仅适用于较新的浏览器(确切的浏览器版本在链接中),但如果您将网站定位到较旧的浏览器,您可能需要考虑使用哈希进行后备。如果您决定有这样的后备,我建议您搜索一个可以完成它的插件,而不是自己制作。

于 2012-08-09T02:55:47.783 回答