如何查找私人页面,javascript,jquery的所有链接

时间:2014-06-27 15:12:29

标签: javascript jquery html

以下是该场景:当网站访问者未登录网站

时,客户端请求点击指向私有网页的链接时的某些行为(灯箱)。

KEY:在用户登录网站之前,网站上的私人网页未列在顶部导航html中。

链接转到私有页面没有参数或标识符。 BUT 我们可以通过引用顶部导航的路径名来了解哪些链接是公开的,从而排除公共链接和外部链接,页面上的每个其他链接必须是内部和外部链接。私有的。

我们所知道的:

  • URL主机(我们可以用它来查找链接是内部还是 外部
  • 导航公开的链接(我们可以通过查看我们的顶部导航结构找到这个)
  • 外部链接(我们可以根据知道主机网址找到此内容)

是否可以知道网站上的哪些链接是内部的&私人基于排除已知的公众&外部链接,可能是使用jQuery或JS编写它的方法吗?

编辑:内部链接不保证是相对的,很可能是绝对的

EDIT 2.0:

我认为我们可以知道...

当前网址(这需要是动态的,因为脚本将在从生产网址移动到客户选择的多个网站上使用):http://example.com

外部网址:?可能是任何东西,需要找到或排除这些链接。我不想针对那些

这是导航的示例。

<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到客户选择的多个站点,并且客户端能够将他们需要的任何页面公开。)

那些就是已知的网址,href&amp;链接。

我想要定位的是仍在http://example.com但未在navigation div中列出的链接。

1 个答案:

答案 0 :(得分: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")
;

更新的答案(基于反馈)

此解决方案应匹配阵列中的所有链接。

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/