2017-05-22 191 views
0

我試圖從使用jQuery的頁面中獲取所有網址,稍後使用$.get()調用它們。如果因爲腳本包含在他們是在同一頁上,這將是沒有問題的呼籲像從外部URL獲取所有網址

var links = document.getElementsByTagName("a"); 
for(var i=0; i<links.length; i++) { 
    alert(links[i].href); 
} 

在這種情況下,我只是用警報檢查的鏈接實際上解析。 但我怎麼能做一個不是當前頁面的URL呢? 任何幫助,將不勝感激。也許我錯過了一些荒謬可笑的東西,但當涉及到任何與JavaScript/JQuery相關的東西時,我真的很難過。

+0

如果不是在當前頁面的文檔模型 – brk

+1

的意思是不是要訪問的內容收集當前頁面的URL頁面必須寫在不同的域上,以便您可以這樣做,默認情況下(在客戶端)不可能(相同的源策略) –

+0

假設它,我該怎麼做? – skulpt

回答

1

你將不得不通過HTTP請求($.get在JQuery中實現了這一點),以獲得其他頁面,然後要麼去有關HTML轉換成DOM jQuery可再遍歷並找到<a>標籤爲你,或使用其他方法(如正則表達式)查找返回的標記中的所有鏈接。

編輯:也許實際上並不使用正則表達式,除非你有一個保證的HTML格式,並可以保證網頁上的所有<a>標籤的格式。就這一點而言,解析HTML可能更容易。

+0

請不要用正則表達式解析HTML! https://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not – Pevara

+0

它可以做,如果你可以保證標記格式,但你是對的可能只是更容易解析真正的HTML並從那裏開始。 – varbrad

2

公然抄襲this答案由Nick Craver(去給予好評),但修改它你的使用情況:

$.get("page.html", function(data) { 
    var data = $(data); 
    var links = data.find('a'); 
    //do stuff with links 
}); 

請注意,如果你打的頁面被設置爲跨這隻會工作原產地請求。如果不是,您需要對來自後端服務器的Dom解析器執行相同的操作。 Nodejs有一些很棒的選擇,包括jsDom

0

使用window.location.href再搭配同與其他「一」的標籤在迴路中的href

var links = document.getElementsByTagName("a"); 
var thisHref = window.location.href; 
for(var i=0; i<links.length; i++) { 
    templink = links[i].href; 
    if (templink != thisHref){// if the link is not same with current page URL 
     alert(links[i].href); 
    } 
}