用于查明链接是否为内部的Javascript逻辑

时间:2012-04-13 16:11:03

标签: javascript ajax url history.js

我在https://github.com/browserstate/ajaxify

中遇到了以下功能的问题

对于以下格式的网址:

http://rooturl.com/?alfa=a

或任何其他查询字符串未被识别为内部链接。 (rooturl.com是我的内部主页)

    // Internal Helper
    $.expr[':'].internal = function(obj, index, meta, stack){
        // Prepare
        var
            $this = $(obj),
            url = $this.attr('href')||'',
            isInternalLink;

        // Check link
        isInternalLink = url.substring(0,rootUrl.length) === rootUrl || url.indexOf(':') === -1;

        // Ignore or Keep
        return isInternalLink;
    };

如何修改此函数以使其将查询字符串的内部URL计为“内部链接”??

以供参考,该函数用于以下上下文:

$this.find('a:internal:not(.no-ajaxy, .no-ajaxy a)').click(function(event){
     // so on...
});

2 个答案:

答案 0 :(得分:1)

我认为您需要做的就是检查?在URL中,因为它是查询字符串

所必需的
isInternalLink = url.substring(0,rootUrl.length) === rootUrl || url.indexOf('?') !== -1 || url.indexOf(':') === -1;

但是另一个URL可能有查询字符串并且是外部的,因此您可能需要使用split()并检查第一位是否与rootUrl匹配

var bits = url.split('?');

if (bits[0] === rootUrl) isInternalLink = true; 

答案 1 :(得分:0)

这样的事情应该起作用

$('a[href^=http]')

只返回带有外部hrefs的链接

或做类似的事情

$('a').filter('[href^=http]')

$(this).is('[href^=http]')   //will return true if external hrefs

在你的情况下