2014-06-27 28 views
-1

以下是該場景:當網站訪問者未登錄到網站時,客戶端請求某個行爲(一個燈箱)點擊到私人頁面的鏈接如何找到私人頁面的所有鏈接,javascript,jquery

關鍵:在用戶登錄該網站之前,網站上的私人網頁未列在頂部導航HTML中。

沒有參數或標識符鏈接到私人頁面。 但是我們可以通過引用頂部導航的路徑名來知道哪些鏈接是公開的,從而排除了公共鏈接和外部鏈接,頁面上的每個其他鏈接都必須是內部的&私有的。

我們知道:

  • URL主機(我們可以用它來找到,如果鏈接是內部或 外部
  • 導航鏈接是公共的(我們可以看我們的頂部導航找到這個結構)
  • 外部鏈接(我們可以找到此基礎上知道主機URL)

是否有可能知道哪一個站點鏈接都是內部&私人基於排除已知公衆&外部鏈接,可能有什麼方法可以使用jQuery或JS編寫此代碼?

編輯:鏈接,是內部都不能保證是相對的,他們很有可能將是絕對的

編輯2.0:

我認爲我們可以知道...

當前URL(這需要動態,因爲腳本將用於從生產URL到客戶選擇的多個站點):http://example.com

外部URL:?可以是任何東西,需要找到或排除這些鏈接。我不想瞄準那些

這是一個導航的例子。

<div class="navigation"> 
    <a href="http://example.com/home"></a> 
    <a href="http://example.com/about"></a> 
    <a href="http://example.com/register"></a> 
</div> 

我不想定位頂部導航中顯示的鏈接,因爲這些鏈接始終是公開的。 (同樣,這需要是動態的,因爲腳本將用於從生產URL到客戶選擇的多個站點,並且客戶端能夠將他們需要的任何頁面公開)。

所以這些將是已知的URL,href的&鏈接。

我想要的是鏈接仍然在http://example.com但未列在navigation股利。

+0

是否有任何跡象顯示它的網頁是「私人」在URL中?如'example.com/private/somepage' – apaul

+0

不,不存在 – Designaroni

回答

1

假設所有的外部鏈接是絕對的,所有的內部鏈接是相對的,你可以做這樣的事情:

$("a[href^='http']").addClass("external-link"); 

否則,你可以做這樣的事情:

var knownExternalHosts = ["foo.com"]; 

$("a") 
    .filter(function(){ 
     var found = false; 
     knownExternalHosts.forEach(function(knownHost){ 
      if(~this.href.indexOf(knownHost)) found = true; 
     }, this); 
     return found; 
    }) 
    .addClass("external-link") 
; 

修訂ANSWER(基於反饋)

此解決方案應匹配數組中的所有鏈接。

var knownLinks = ["http://foo.com", "/foo"]; 
$("a") 
    .filter(function(){ 
     var found = false; 
     knownLinks.forEach(function(knownLink){ 
      if($(this).attr("href") === knownLink) found = true; 
     }, this); 
     return found; 
    }) 
    .addClass("known-link") 
; 

這裏是一個小提琴:http://jsfiddle.net/moderndegree/sE4KL/

+0

內部鏈接並不保證是相對的,它們很可能是絕對的,我不想尋找外部鏈接,但不公開內部鏈接可用 – Designaroni

+0

然後我的答案的第二部分將工作得很好。 –

+0

你的jsfiddle看起來像只針對外部vs /內部鏈接,它看起來像你的目標是相對鏈接結構,情況並非如此 - 我可能不是最好的解釋我的問題,但對於任何混淆抱歉 – Designaroni

相關問題