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
    不过这个不算特别常见,暂时就算了,以后要用到再修改

  • 相关阅读:
    String(Java版本)
    前端工程化开发之yeoman、bower、grunt
    前端自动化开发之grunt
    前端模块化开发之seaJs
    浅谈图片蒙版效果-webkit-mask
    div模拟textarea实现高度自增长
    预加载显示图片的艺术
    轻松实现localStorage本地存储
    利用Navigation Timing测量页面加载时间
    利用jstree插件轻松构建树应用
  • 原文地址:https://www.cnblogs.com/aaronzhang/p/4491498.html
Copyright © 2011-2022 走看看