我有带有按钮/链接/带有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 进行测试,但有没有更好的方法来做到这一点,而无需对要排除的不同协议进行大量 IFs 测试。
使用@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();
}
});
您可以使用链接的属性查找协议。
var theProtocol = linkEl.prop("protocol");
var isHttp = linkEl.prop("protocol").indexOf("http") === 0;
对于文本解决方案,您可以使用以下正则表达式:
var x = new RegExp('^([^:/?#]+:)?(//[^/?#]*)?([^?#]*)');
x.match(url);
如果第二个内存位置是undefined
或http:
或https:
则您可能正在处理常规URL。