0

我在https://github.com/browserstate/ajaxify中的以下函数存在一些问题

对于以下形式的 url:

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...
});
4

2 回答 2

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; 
于 2012-04-13T16:18:21.023 回答
0

像这样的东西应该工作

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

只会返回带有外部hrefs的链接

或做这样的事情

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

或者

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

在你的情况下

于 2012-04-13T16:17:24.627 回答