以下是该场景:当网站访问者未登录网站
时,客户端请求点击指向私有网页的链接时的某些行为(灯箱)。KEY:在用户登录网站之前,网站上的私人网页未列在顶部导航html中。
链接转到私有页面没有参数或标识符。 BUT 我们可以通过引用顶部导航的路径名来了解哪些链接是公开的,从而排除公共链接和外部链接,页面上的每个其他链接必须是内部和外部链接。私有的。
我们所知道的:
是否可以知道网站上的哪些链接是内部的&私人基于排除已知的公众&外部链接,可能是使用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中列出的链接。
答案 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")
;