这会一直有效吗?它可以改进吗?

时间:2012-03-16 16:23:43

标签: javascript jquery ajax

我正在努力让ajax导航工作,所以这就是我尝试过的:

$('nav a').on('click', function() { 
    $.ajax({
        url: this.href,
        success: function(data) {
            $('#content').html( $(data).find('#content').html() );
        }
    });
});

问题是因为我的链接或img都没有工作,所有内容都相对链接。更糟糕的是,它尝试加载所有img甚至是我没有使用的(img预加载),并且我的徽标的相对路径对于某些页面是不正确的。

如果我更改了所有srchref,则通过正则表达式运行以查找并替换所有错误路径,然后将attrs更改回srchref它会起作用吗?

这就是我的意思。

$('nav a').on('click', function() {
    var href = this.href 
    $.ajax({
        url: this.href,
        success: function(data) {
            var html = data.replace(/href/g, 'hrefhref')
                .replace(/src/g, 'srcsrc');

            $('#content').html(
                $(html).find('#content').html().replace(/hrefhref/g, 'href')
                    .replace(/srcsrc/g, 'src')
                    .replace(/href=\.\/'/g, "href='" + href)
                    .replace(/href=\.\/"/g, 'href="' + href)
                    .replace(/src=\.\/'/g, "src='" + href)
                    .replace(/src=\.\/"/g, 'src="' + href)
            );
        }
    });
});

我的问题是:如果路径不以点开头,有没有办法让它工作? 当然,如果href或src attr在另一个域上或已经完全修改,它不应该改变任何东西

此外,它始终适用于所有浏览器,在解析时会有一个attr hrefhrefsrcsrc被剥离。

2 个答案:

答案 0 :(得分:15)

在设置中使用BASE元素。这样,您可以在本地开发,并可以将其放在服务器上。您唯一需要改变的是BASE元素中的href。

http://www.w3.org/TR/html401/struct/links.html#h-12.4

或者看到“可怕而悲惨”的W3Schools解释:http://www.w3schools.com/TAGS/tag_base.asp

答案 1 :(得分:3)

您可以使用虚拟主机确保dev和local之间的绝对路径相同。