【问题标题】:strip all <a> tags except those that start with http去除所有 <a> 标签,除了那些以 http 开头的标签
【发布时间】:2018-09-11 10:41:05
【问题描述】:

我想删除所有以 href="http: 开头的标签,并为每个标签保留链接的文本。

我的 html 文件中还有其他一些我根本不想更改的标签。同样,我只希望以 http 开头的标签与被链接的文本一起保留在原地。

基本上,我希望从 html 文档中删除所有外部链接,并且内部链接保持不变。

任何有关正确查找内容:和替换为:信息的帮助将不胜感激!

【问题讨论】:

标签: html regex


【解决方案1】:

您可以删除所有不包含当前主机的标签:

const links = Array.from(document.getElementsByTagName('a'))
links.forEach(elm => {
  !elm.href.includes(window.location.host) && elm.parentNode.removeChild(elm);
})
<a href="https://google.com">google</a>
<a href="/about">about</a>

不需要 JQuery

【讨论】:

    【解决方案2】:

    解决方案可能类似于

    jQuery( document ).ready( function($) {
    
    //stores all a tags in an array.
    var aTags = document.getElementsByTagName("a");
    var re = new RegExp("^http://");
    var length = aTags.length;
    
    for(var i = 0; i < length; i++) {
        if( aTags[i].href.test(re) ) {
             aTags[i].href = "https://" //reset to something else if true?
    
             //OR
    
             aTags[i].href.replace("http://", "https://"); //replace with https
        }
    }
    
    });
    

    【讨论】:

      【解决方案3】:

      以下 JavaScript 应将所有链接替换为文本,它们包含:

      var links = document.getElementsByTagName("a");
      var regEx = /^https?:\/\//;
      
      for (var i = 0; i < links.length; i++)
      {
          var elem = links[i];
          if (elem.href.test(regEx))
          {
              var node = document.createTextNode(elem.textContent);
              elem.parentElement.replaceChild(node, elem);
          }
      }
      

      它循环遍历所有链接,如果它们以“http://”或“https://”开头,则会使用该文本创建一个文本节点,并且该文本节点会替换该链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 2017-04-08
        • 2011-09-08
        • 2011-05-15
        • 1970-01-01
        • 2010-09-07
        • 2013-04-28
        相关资源
        最近更新 更多