javascript测试URL相对或绝对而不是mailto:

时间:2012-10-11 13:02:30

标签: javascript jquery

我有带有按钮/链接/电子邮件和mailto的表格:并且已经编写了一个默认的双击功能,双击该行会将用户引导到表格中的最后一个链接。

99%的表格会在最后一栏中显示“编辑”按钮。

$('table:not(.noDoubleClick) tr td').dblclick(function() {
    var linkEl = $(this).parents('tr').find('td:last-child a');

    if(!linkEl.length){
        return false;
    }

    if (linkEl.attr('href') && linkEl.attr('onclick') === undefined && !linkEl.hasClass("popme")) {
        document.location = linkEl.attr('href');
    } else {
        linkEl.click();
    }
});

这个工作正常,直到我有一个罕见的表,其中最后一列是带有mailto的电子邮件地址。

问:我如何检查href是否只是相对/绝对链接。因此,这将排除mailto:和任何其他非标准URL的链接。

我知道我可以这样做:linkEl.attr('href').substring(0, 7) == "mailto:"专门针对mailto进行测试,但是有一种更好的方法可以在不加载IF测试的情况下对不同的协议进行排除。

使用@epascarello的工作解决方案进行更新:

$('table:not(.noDoubleClick) tr td').dblclick(function(e) {
    var linkEl = $(this).parents('tr').find('td:last-child a');
    var linkElHref = linkEl.attr('href');

    // Check if has href and http protocol
    if(!linkElHref.length || this.protocol.indexOf("http") !== 0){
        e.preventDefault();
        return false;
    }

    if (linkElHref && linkEl.attr('onclick') === undefined && !linkEl.hasClass("popme")) {
        document.location = linkElHref;
    } else {
        linkEl.click();
    }
});

2 个答案:

答案 0 :(得分:3)

您可以使用链接的属性查找协议。

var theProtocol = linkEl.prop("protocol");
var isHttp = linkEl.prop("protocol").indexOf("http") === 0;

答案 1 :(得分:2)

对于文本解决方案,您可以使用此正则表达式:

var x = new RegExp('^([^:/?#]+:)?(//[^/?#]*)?([^?#]*)');
x.match(url);

如果第二个记忆位置为undefinedhttp:https:,您可能正在处理常规网址。