任何人都可以帮我解决如何删除或替换JS模板中的现有链接。我使用backbone.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 attr并不完全显示正确的数据。我的localhost / testserver包含在href attrib。
中Web: <a href="localhost/testserver/www.test.com">www.test.com</a>
我想要的是删除默认的基本网址。必须像这样输出:
Web: <a href="www.test.com">www.test.com</a>
答案 0 :(得分:8)
添加http://
试试这个
<abbr title="Website">Web :</abbr> <%= (website)? '<a href="http://'+ website +'" id="website">' + website + '</a>' : '' %></address>
答案 1 :(得分:7)
这里有什么问题?
实施的问题是,当您设置href
属性而没有任何协议(http,https,ftp等)时,浏览器会将链接视为相对路径。因此,当您在http://localhost/testserver/
上查看该页面时,您网页的网址将变为localhost/testserver/www.test.com
如何解决?
简而言之,要解决此问题,您需要在网址前添加http://
(如果没有)。您可以通过多种方式完成此操作,例如:
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;
}
您可以通过多种方式使用此功能来解决问题。您可以找到here
的示例实现快乐的编码!!
答案 2 :(得分:2)
如果使用绝对路径,则href必须以协议开头。如果没有协议,浏览器会将其解释为相对路径,导致您获得类似localhost/testserver/www.test.com
的内容。
我相信唯一真正的解决方案就是将协议添加到你的href。
答案 3 :(得分:1)
您是否正在复制网址? www.test.com
不是有效的完全限定网址。您需要将http://
添加到您的网址中。唯一可能进入事物的方式是“网站”变量包含这些信息,我不能从你的问题中得到这些信息。
你的问题有点奇怪,你提供的例子还不足以在这一点上提出更多建议(虽然我会说我一般不鼓励模板回声中的三元操作,就像你已经得到的那样)。
答案 4 :(得分:0)
用http://替换前缀。这应该可以解决您的问题