Javascript 利用 DOM 特性的两个小技巧

作者:mingcheng 来源:gracecode.com 时间:2009-02-28 14:07:00 

此类技巧还有很多,欢迎继续分享

解析 URL
James Padolsey 的 Blog中看到的个小技巧,就是利用 a 标签的 DOM 属性解析 URL 字符串。

// This function creates a new anchor element and uses location
// properties (inherent) to get the desired URL data. Some String
// operations are used (to normalize results across browsers).
 
function parseURL(url) {
    var a =  document.createElement('a');
    a.href = url;
    return {
        source: url,
        protocol: a.protocol.replace(':',''),
        host: a.hostname,
        port: a.port,
        query: a.search,
        params: (function(){
            var ret = {},
                seg = a.search.replace(/^\?/,'').split('&'),
                len = seg.length, i = 0, s;
            for (;i<len;i++) {
                if (!seg[i]) { continue; }
                s = seg[i].split('=');
                ret[s[0]] = s[1];
            }
            return ret;
        })(),
        file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
        hash: a.hash.replace('#',''),
        path: a.pathname.replace(/^([^\/])/,'/$1'),
        relative: (a.href.match(/tp:\/\/[^\/]+(.+)/) || [,''])[1],
        segments: a.pathname.replace(/^\//,'').split('/')
    };
}

可对比下“传统的”正则解析方式(取自 Tbra 库),至少上面代码看起来更容易理解得多

parseURL: (function() {
    var keys = ['source', 
                'prePath', 
                'scheme', 
                'username', 
                'password', 
                'host', 
                'port', 
                'path', 
                'dir', 
                'file',
                'query', 
                'fragment'];
    var re = /^((?:([^:\/?#.]+):)?(?:\/\/)?(?:([^:@]*):?([^:@]*)?@)?([^:\/?#]*)(?::(\d*))?) \
               ((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*)) \
               (?:\?([^#]*))?(?:#(.*))?/;    
    return function(sourceUri) {
        var uri = {};
        var uriParts = re.exec(sourceUri);
        for(var i = 0; i < uriParts.length; ++i) {
            uri[keys[i]] = (uriParts[i] ? uriParts[i] : '');
        }
        return uri;
    }
})();

(反)转义 HTML

取自 Prototype 中的相应代码

escapeHTML: function(str) {
    var div  = document.createElement('div');
    var text = document.createTextNode(str);
    div.appendChild(text);
    return div.innerHTML;
}
unescapeHTML: function(str) {
    var div       = document.createElement('div');
    div.innerHTML = str.replace(/<\/?[^>]+>/gi, '');
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
}

 

标签:DOM,url,javascript,技巧
0
投稿

猜你喜欢

  • Python装饰器简单用法实例小结

    2022-01-18 22:19:40
  • CSS控制鼠标样式变换方法

    2007-11-17 07:58:00
  • Python实现对桌面进行实时捕捉画面的方法详解

    2022-09-06 19:12:59
  • golang定时器和超时的使用详解

    2023-07-23 21:35:12
  • 利用python为运维人员写一个监控脚本

    2021-01-19 16:12:37
  • Python使用conda如何安装requirement.txt的扩展包

    2022-03-13 23:01:18
  • MySQL Workbench下载与使用教程详解

    2024-01-13 18:50:26
  • mysql启动时出现ERROR 2003 (HY000)问题的解决方法

    2024-01-22 02:53:13
  • 语言编程花絮内建构建顺序示例详解

    2023-11-04 09:42:12
  • 在thinkphp5.0路径中实现去除index.php的方式

    2024-05-11 09:54:34
  • MySQL是怎么保证主备一致的

    2024-01-21 13:13:42
  • Python制作CSDN免积分下载器

    2021-12-25 03:46:35
  • 使用Python操作FTP实现上传和下载的方法

    2023-03-09 20:49:51
  • golang 如何获取map所有key的方式

    2024-02-21 20:28:57
  • Django的models模型的具体使用

    2022-08-13 07:57:04
  • 常用ASCII 码对照表

    2007-08-21 14:35:00
  • thinkphp3.x自定义Action、Model及View的简单实现方法

    2024-05-11 10:04:01
  • python实现学员管理系统

    2021-05-31 07:02:45
  • CSS处理斜角导航条的一个例子

    2007-08-27 12:38:00
  • mysql之跨库关联查询(dblink)问题

    2024-01-20 21:54:54
  • asp之家 网络编程 m.aspxhome.com