【问题标题】:html strip the protocol from the string https:// javascripthtml 从字符串 https:// javascript 中剥离协议
【发布时间】:2018-04-03 15:29:58
【问题描述】:

我的 html 显示为

<a class="Test" ng-href="{{d.link}}">link</a>

所以我的 d.link 等于例如。 (google.com) ng-href 不会带我去看它,因为它不是 https://

所以我的逻辑解释是添加ng-href="https://{{d.link}}"

但是如果我的 d.link 是 https://google.com 那么我的 ng-href 将是 https://https://google.com.. 我需要去 JS 还是可以在 html 中解决?

谢谢

【问题讨论】:

  • 为什么不能强制d.link 使用一种格式或另一种格式,而不是同时处理这两种格式。这是一个设计缺陷,如果您只是尝试使用 HTML 和 JavaScript“解决”它,那么很容易出现错误。
  • 所以 js 是 Patrick :)
  • 更改d.link的值...顺便说一句,您可以放弃协议,只需使用//google.com启动uri ..这样它会自动选择是否使用https,具体取决于是否当前页面使用它..

标签: javascript html angular


【解决方案1】:

你可以让浏览器决定使用什么协议,所以你的代码会是这样的:ng-href="//{{d.link}}"

试试吧,希望能解决你的问题。

【讨论】:

  • 他是说协议已经包含在变量中..所以使用你的建议他的属性将是//http://google.....
  • @Occam'sRazor 哎呀,所以他必须使用 JS 解决方案,并且必须使用 JS 剥离协议。
【解决方案2】:

如果你愿意的话……

{{"//"+d.link.replace(/^(http|https):\/\/(.+)/,"$2")}}

这会使用 Regex 从给定字符串中删除 http:// 或 https://。 $2 是括号的第二组 (),也称为捕获组。

【讨论】:

  • 也许你的意思是d.link = d.link.replace(/http[s]?:/,"")
  • 也许 OP 也是这个意思,但我们可能永远不会知道。
  • 您的答案现在考虑了可选的s 并使用了第二个匹配项,这样更好,但仍然不正确。如果它是来自另一个域的 url,则 url 需要以 // 开头,否则它将假定 google.com 是一个相对 url 将他带到 http://his-domain.com/google.com.. 最好的方法是删除一个 http 或一个https 如果存在。
  • 打开您的控制台并输入window.location.href = "google.com" 看看会发生什么
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2010-09-19
  • 2012-09-11
  • 1970-01-01
  • 2018-04-20
  • 2014-11-22
相关资源
最近更新 更多