2009-10-09 232 views
0

我已经使用AJAX成功更改网页的内容。我可以从我的域中包含另一个网页,但是我遇到的问题是使超链接正常工作。如果超链接使用相对寻址那么这将无法相对于我包括它在内的页面工作,所以我正在调查php来解析html标签,因为我在AJAX更改页面内容

我使用以下RegExp /href[\s]?=[\s\"\']+(.*?)[\"\']/im来查找href数据,但希望能指出我如何为相对地址加前缀。

我想在页面http更换链接HREF = “./测试1/page1.html”
:// foo.bar.com/folder1/info1/data.html
与HREF = “的http:// foo.bar.com/folder1/info1/ ./test1/page1.html”
那么如果我包括http://foo.bar.com/folder2/faraway/another.html/folder1/info1/data.html的页面内容嵌入式页面上的链接将正常运行 我正在使用php preg_replace函数来做这件事,但很快就会来粘住。如果我吠叫错误的树,并且有更合适的工具或方法,有人可以请我指出正确的方向;-)。也许它可以全部在Javascript下来?

+0

听起来像你有组织问题,我会重新访问你的页面是如何组织的......如果它都在同一台服务器上,只需使用绝对路径,如'/folder1/whatever.html' – 2009-10-10 03:49:45

回答

2

如果你打算在页面上做更多的JavaScript,你可以使用JQuery。

function make_absolute(base_path){ 
    $("#embedded a").each(function(){ 
     this.attr("href", 
        base_path + this.attr("href") 
       ); 
    }); 
} 

将“#嵌入”替换为嵌入页面的ID。

如果你不打算将JavaScript用于其他任何东西,这几乎肯定是矫枉过正的,但如果你打算制作一个闪亮动态的ajaxy页面,你可以查看它。

奖励: 做AJAX页面加载使用jQuery:

$("#embedded").load(page_you_want_to_load) 
0

为什么你不使用绝对路径?

+0

我认为这是因为他从另一个网站加载网页,而不一定是他自己的网站。 – 2009-10-10 03:38:31

+0

跨站点脚本... woops – whatnick 2009-10-10 13:11:05

+0

看起来不像OP的描述 – jeroen 2009-10-10 14:04:30

2

以ABentSpoon的反应了一步,你的jQuery选择可以搜索以斜线开头的所有锚标签。

$('#embedded a[@href^=/]').each(function() { 
    $(this).attr('href', baseUrl + $(this).attr('href')); 
}); 

如需关于jQuery选择器的更多帮助,请转至here

+0

我认为他会希望锚* *不*以斜杠开始。有没有办法做到这一点? 如果它以斜线开头,那对绝大多数用途来说绝对够用;您无法通过JavaScript加载其他网站的网页。 (或者你能吗?) – ABentSpoon 2009-10-10 04:45:49

0

你们肯定帮了我很多,非常感谢。我认为我需要的正则表达式是/href[\s]?=[\s\"\']\./is,因为ABentSpoon指出“如果它以斜杠开始,那对于大多数目的来说绝对够用”。不过,我想这将是一个很好的excersise从其他网站的阅读页面。幸运的是,我可能希望这样做的任何页面都在同一个站点上,并在同一台服务器上。

为了选择使用绝对路径的Jeroen评论,这不是一个真正的选择,因为这个网站上有很多页面。同样,每个页面都会以不同的方式(DNS)进行处理,具体取决于从内部或外部访问的位置。如果你给你的链接一个绝对路径,你将它们全部绑定到具有该站点的DNS名称。如果你发现这种情况经常发生变化,或者因为这种情况,你需要改变子目录名称,但这是另一回事。我希望设计这个功能更灵活一点。

我一定会读到关于jQuery的。看起来很有趣,这不是我玩过的东西,但...更多的学习即将上演;-)

再次感谢您抽出时间。