标签: JavaScript

  • trim for IE

    因为 IE 不原生支持字符串的 trim 方法,所以,只能再特殊处理。

    if(typeof String.prototype.trim !== 'function') {
      String.prototype.trim = function() {
        return this.replace(/^\s+/, '').replace(/\s+$/, '');
      };
    }
    
  • 使用 JavaScript 生成随机字符串

    用途:如 Oauth 认证等需要的等长随机字符串。

    /**
     * By James from http://www.xinotes.org/notes/note/515/
     */
    function randomString(length) {
        var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz'.split('');
    
        if (! length) {
            length = Math.floor(Math.random() * chars.length);
        }
    
        var str = '';
        for (var i = 0; i < length; i++) {
            str += chars[Math.floor(Math.random() * chars.length)];
        }
        return str;
    }
    
    /* examples */
    
    // generate a random string of random length
    randomString();
    
    // generate a random string of length 8
    randomString(8);
    
  • Tab 切换可能引发 flash 重新下载

    Tab 切换是一个常见的功能特性,称呼好像很多,比如焦点图、舌签切换等,我常叫为 Tab 切换。一个示意图如下:

    yahoo tab 切换

    普通的切换显示文字、图片,甚至是 Ajax 加载一般都不会有什么问题,不过,最近在做 flash 切换的时候发现了个问题,采用 display:block / none 来控制显示隐藏会导致 flash 重新加载。需要说明的是,并不是简单的重新渲染,而是重新请求下载。

    (更多…)

  • 允许复制

    想复制些东西却发现用 JavaScript 禁止了复制,于是想起了 keakon 的『破解网页禁止复制的Chrome插件:Enable Copy』,不错相对于插件,我更喜欢 bookmarklet 这种形式,于是将插件中的代码提取了出来(作者介意否?)

    javascript:(function(){var doc = document;var body = doc.body;body.onselectstart = body.oncopy = body.onpaste = body.onkeydown = doc.onselectstart = doc.oncopy = doc.onpaste = doc.onkeydown = doc.oncontextmenu = null;})();
    
  • document.write

    document.write(markup)是一个比较常用的语句,不过对它的规定其实没真正看过,直到看到有人问在jQuery的ready使用document.write的问题才令我想起去看看语言定义。

    在MDN上找到相关说明

    向由document.open打开的文档流写入字符串。

    (更多…)

  • 鼠标页面坐标

    一个常见的需求,无数人写过的东西,记录于此。

    function mousePos (event) {
        e = event || window.event;
        doc = document.body || document.documentElement;
        return {
            'x' : e.pageX || e.clientX + doc.scrollLeft,
            'y' : e.pageY || e.clientY + doc.scrollTop
        };
    }
    

  • JS版本的迅雷、旋风和普通链接的转换

    偶尔看到个PHP版本的迅雷、快车、QQ旋风专有链接的转换,然后看了一下迅雷、快车、QQ旋风专链转换原理,再加上看到说除IE外的浏览器都已经支持base64的加密、解密,其中btoa是加密,atob是解密。一时兴起,就写了个JS版本。

    demo地址

  • Table注意事项

    首先是一段 HTML 代码:

    <table id="tb">     
        <tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
        <tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
        <tr><td>9</td><td>10</td><td>11</td><td>12</td></tr>            
        <tr><td>13</td><td>14</td><td>15</td><td>16</td></tr>
    </table>
    

    DOM解析

    对于一段 table 的 HTML 代码,即使没有显式写出 tbody 结构,浏览器在解析的时候都会加上 tbody 结构。所以,对于以上代码,若想获取第一行,需要使用代码:

    document.getElementById('tb').lastChild.firstChild; //第一行
    //document.getelementById('tb').lastChild 得到的不是最后一行而是 tbody
    

    (更多…)

  • JavaScript 中的闭包

    一个闭包,简单地说,就是一个函数以及其定义时的上下文环境。

    用代码来解释会更直观一点:

    function outerFn() {
        var name = "outer";
        function innerFn() {
            alert(name);
        }
        return innerFn;
    }
    var myFunc = outerFn();
    myFunc();   // output "outer"
    

    这样,myFunc 便是一个闭包,其包括了函数 innerFn() 和其上下文环境 name
    (更多…)

  • JavaScript中字符串连接性能

    看到很多书或文章中都有说在JavaScript中进行字符串连接时最好使用Array的join而不是字符串的“+”操作。因为,join的性能更好,速度更快,可我使用以下代码测试时却得到相反的结果。

    Demo页面
    (更多…)