zoukankan      html  css  js  c++  java
  • js 获取页面内链接

    今天有同学问如何用 JS 正则表达式获取一段文本中的超链接,并对超链接进行处理,想了几分钟,写了下面的代码:

    var re = /https?://[w.:~-d/]+(?:?[wd-_&=%]+)?(?:#[^s]+)?/i;

    这个正则表达式处理这种类型的URL:

    protocol://host:port/path?param=value#xxoo

    想法是好的,但总要测试通过才可以,随即又写了一段获取页面内所有带有 src, href 属性的代码:

    function getGoodUrls() {
        var slice = [].slice, srcs, hrefs, links, hasAsk;
        hasAsk = function(url){
            return url ? (url.indexOf('http') === 0 && url.indexOf('?') > -1) : false;
        };
        srcs = slice.call(document.querySelectorAll('[src]'), 0);
        srcs = srcs.map(function(dom){ return dom.src; }).filter(hasAsk);
        hrefs = slice.call(document.querySelectorAll('[href]'), 0);
        hrefs = hrefs.map(function(dom){ return dom.href; }).filter(hasAsk);
        links = srcs.concat(hrefs);
        return links
    }

    ok,开测:

    links.forEach(function(s){
      //加上中文看中文会不会被选中 s
    = s + '发大家看法'; console.log('%cbefore: ' + s, 'color:red;') console.log('%cafter: ' + s.replace(re, function(href){ return '<a href="' + href + '"><img/></a>'; }), 'color: green'); });


    结果,多数URL都还是通过了的,也有少部分无法通过,比如像:http://xx.oo?next=http://oo.xx
    不过这个不算特别常见,暂时就算了,以后要用到再修改

  • 相关阅读:
    JBDC链接数据库
    js操作BOM对象
    打印倒正三角形
    window.onload事件
    js动态改变样式属性(className属性)
    js动态改变样式属性(style属性)
    js操作DOM对象(节点的增删改)
    easygen通用代码生成框架[开源]
    什么是真正的幸福与成功
    JVM学习笔记八:线程安全与锁优化
  • 原文地址:https://www.cnblogs.com/aaronzhang/p/4491498.html
Copyright © 2011-2022 走看看