2009-10-09 286 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的。看起來很有趣,這不是我玩過的東西,但...更多的學習即將上演;-)

再次感謝您抽出時間。