2014-06-27 29 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

相关问题