>任何人都可以帮助我如何删除或替换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://
。您可以通过多种方式执行此操作,例如:
- 按照尼蒂什·库马尔的建议更新您的模板。
- 使用 jQuery 将所有 URL 前置替换为
http://
- ....或许多其他方式!!
选项 1 或 2 很容易实现,如果您确定您的URLs
将始终像您的示例一样,则可以解决您的问题。但对于以下用例将失败:
- 如果您的网址已经有协议(即
http://google.com
(。然后您的网址将变得http://http://google.com
- 如果您的网址确实是一个相对网址(即
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://。这应该可以解决您的问题