如何删除JS文本/模板中的默认链接


How to remove default link in JS text/template

>任何人都可以帮助我如何删除或替换JS模板中的现有链接。为此,我使用骨干.js。

这是我的代码:

<script id="option-show-template" type="text/template">
<address>
   <abbr title="Website">Web :</abbr> <%= (website)? '<a href="'+ website +'" id="website">' + website + '</a>' : ''  %></address>
</script>

输出:

Web: www.test.com

问题是即使它会输出正确的数据,但 href 属性没有完全显示正确的数据。我的本地主机/测试服务器包含在 href 属性中。

Web: <a href="localhost/testserver/www.test.com">www.test.com</a>

我想要的是删除默认的基本网址。必须按以下方式输出:

Web: <a href="www.test.com">www.test.com</a>

添加http://

试试这个

 <abbr title="Website">Web :</abbr> <%= (website)? '<a href="http://'+ website +'" id="website">' + website + '</a>' : ''  %></address>

这里有什么问题??

你的实现的问题在于,当你在没有任何协议(http,https,ftp等(的情况下设置href属性时,浏览器将链接视为相对路径。 因此,当您在http://localhost/testserver/上查看页面时,页面的URL会变得localhost/testserver/www.test.com

如何解决??

简而言之,要解决此问题,如果没有,则需要在URL之前添加http://。您可以通过多种方式执行此操作,例如:

  1. 按照尼蒂什·库马尔的建议更新您的模板。
  2. 使用 jQuery 将所有 URL 前置替换为http://
  3. ....或许多其他方式!!

选项 1 或 2 很容易实现,如果您确定您的URLs将始终像您的示例一样,则可以解决您的问题。但对于以下用例将失败:

  1. 如果您的网址已经有协议(即 http://google.com(。然后您的网址将变得http://http://google.com
  2. 如果您的网址确实是一个相对网址(即 my/relative/url (。然后它应该保持原样,但您将获得没有域的无效网址 - http://my/relative/url

终极解决方案!!

因此,您可以使用以下功能来修复您的网址

//Check if it is a valid URL with FQDN
function isValidUrl(url) {
    return url.match(/((ftp|http|https):'/'/)?['w'-]+'.['w'-]+/);
}
//Check if the url already contain a protocol or not
function hasProtocol(url){
    return url.match(/(ftp|http|https):'/'//);
}
//Fix your URL only if needed!!
function setHttp(link) {
    return (!isValidUrl(link) || hasProtocol(link)) ? link : 'http://' + link;
}

您可以通过多种方式使用此函数来解决问题。 您可以在此处找到的示例实现

快乐编码!!

如果使用绝对路径,则 href 必须以协议开头。 如果没有该协议,浏览器会将其解释为相对路径,从而导致您获得类似 localhost/testserver/www.test.com .

我相信唯一真正的解决方案是将协议添加到您的 href 中。

你是否正在复制网址? www.test.com不是有效的完全限定 URL。 您需要在网址前面加上http://。 唯一可以进入事物的另一种方法是"网站"变量是否包含该信息,我从您的问题中不太得到这些信息。

你的问题措辞有点奇怪,你提供的例子在这一点上还不足以提出更多建议(尽管我会说我通常不鼓励像你一样在模板回显中进行三元运算(。

将 url 前面替换为 http://。这应该可以解决您的问题