2015年8月

javascript常用的自定义函数

如果不使用类库或者没有自己的类库,储备一些常用函数总是有好处的。

1.$()

function $() {
    var elements = [];
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == 'string')
            element = document.getElementById(element);
        if (arguments.length == 1)
            return element;
        elements.push(element);
    }
    return elements;
}

2.getStyle()与setStyle()

function setStyle(el,prop,value){
   if(prop == "opacity" && !+"\v1"){
     //IE7 bug:filter 滤镜要求 hasLayout=true 方可执行(否则没有效果)
     if (!el.currentStyle || !el.currentStyle.hasLayout) el.style.zoom = 1;
     prop = "filter";
     if(!!window.XDomainRequest){
       value ="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity="+value*100+")";
     }else{
       value ="alpha(opacity="+value*100+")"
     }
   }
   el.style.cssText += ';' + (prop+":"+value);
 }
 
 function getStyle(el, style){
   if(!+"\v1"){
     style = style.replace(/\-(\w)/g, function(all, letter){
       return letter.toUpperCase();
     });
     return el.currentStyle[style];
   }else{
     return document.defaultView.getComputedStyle(el, null).getPropertyValue(style)
   }
 }

3.getCookie(), setCookie(), deleteCookie()

function getCookie( name ) {
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
        return null;
    }
    if ( start == -1 ) return null;
    var end = document.cookie.indexOf( ';', len );
    if ( end == -1 ) end = document.cookie.length;
    return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure ) {
    var today = new Date();
    today.setTime( today.getTime() );
    if ( expires ) {
        expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date( today.getTime() + (expires) );
    document.cookie = name+'='+escape( value ) +
        ( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
        ( ( path ) ? ';path=' + path : '' ) +
        ( ( domain ) ? ';domain=' + domain : '' ) +
        ( ( secure ) ? ';secure' : '' );
}
function deleteCookie( name, path, domain ) {
    if ( getCookie( name ) ) document.cookie = name + '=' +
            ( ( path ) ? ';path=' + path : '') +
            ( ( domain ) ? ';domain=' + domain : '' ) +
            ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}

4.inArray()

var inArray = function (arr,value) {
    for (var i=0,l = arr.length ; i <l ; i++) {
        if (arr[i] === value) {
            return true;
        }
    }
    return false;
};

5.insertAfter()

function insertAfter(parent, node, referenceNode) {
    parent.insertBefore(node, referenceNode.nextSibling);
}

6.toggle()

function toggle(obj) {
    var el = document.getElementById(obj);
    if ( el.style.display != 'none' ) {
        el.style.display = 'none';
    }
    else {
        el.style.display = '';
    }
}

7.getElementsByClass()

var getElementsByClassName = function (searchClass, node,tag) {
    if(document.getElementsByClassName){
        return  document.getElementsByClassName(searchClass)
    }else{
        node = node || document;
        tag = tag || "*";
        var classes = searchClass.split(" "),
        elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag),
        patterns = [],
        returnElements = [],
        current,
        match;
        var i = classes.length;
        while(--i >= 0){
            patterns.push(new RegExp("(^|\\s)" + classes[i] + "(\\s|$)"));
        }
        var j = elements.length;
        while(--j >= 0){
            current = elements[j];
            match = false;
            for(var k=0, kl=patterns.length; k<kl; k++){
                match = patterns[k].test(current.className);
                if (!match)  break;
            }
            if (match)  returnElements.push(current);
        }
        return returnElements;
    }
}

8.addLoadEvent()

var addLoadEvent = function(fn) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = fn;
  }else {
    window.onload = function() {
      oldonload();
      fn();
    }
  }
}

9.addEvent()

function addEvent(elm, evType, fn, useCapture) {
  if (elm.addEventListener) {
    elm.addEventListener(evType, fn, useCapture);//DOM2.0
    return true;
  }
  else if (elm.attachEvent) {
    var r = elm.attachEvent('on' + evType, fn);//IE5+
    return r;
  }
  else {
    elm['on' + evType] = fn;//DOM 0
  }
}

使用国内 npm 镜像

npm 默认从国外的源(https://registry.npmjs.org/)获取和下载包信息,国内访问速度很不理想。
就像其他很多开源软件都有国内镜像源,npm 也不例外。所以我们可以利用国内镜像源来加速模块安装。

国内 npm 镜像源

cnpmjs 镜像:

搜索地址:https://cnpmjs.org/
registry : https://r.cnpmjs.org/
淘宝 npm 镜像:

搜索地址:https://npm.taobao.org/
registry : https://registry.npm.taobao.org/
如何使用

临时使用

npm install express --registry https://r.cnpmjs.org/
持久使用

npm 依次通过命令行、环境变量、.npmrc 文件来获取配置

方式一:命令行修改 npm 配置

配置 registry

npm config set registry https://r.cnpmjs.org/

验证配置是否修改成功

npm config get registry
方式二:修改环境变量

任何环境变量以npm_config_开头,将被解释为配置参数。
以 windows 为例,打开:系统信息 > 高级系统设置 > 环境变量。可以新建一条用户变量或者系统变量

变量名

npm_config_registry

变量值

https://r.cnpmjs.org/
方式三:添加 npm 配置文件 .npmrc

.npmrc 包含 4 级,可以按需求选择配置的地方

项目目录:/path/to/my/project/.npmrc
用户目录:~/.npmrc
全局配置:$PREFIX/etc/.npmrc
内置配置:/path/to/npm/.npmrc

.npmrc 配置

registry = https://r.cnpmjs.org
命令行工具 cnpm

还可以通过定制的 cnpm 命令来直接从淘宝镜像源安装模块,参考 https://npm.taobao.org/

# 安装 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org

# 通过 cnpm 命令替代 npm 命令安装模块
cnpm install express

参考资料:

npm-registry
npm-config
淘宝 NPM 镜像
国内优秀npm镜像推荐及使用

HTML与XHTML——二者有什么区别

区别:
1.所有的标记都必须要有一个相应的结束标记
2.所有标签的元素和属性的名字都必须使用小写
3.所有的XML标记都必须合理嵌套
4.所有的属性必须用引号""括起来
5.把所有<和&特殊符号用编码表示
6.给所有属性赋一个值
7.不要在注释内容中使“--”
8.图片必须有说明文字

Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

(1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器以何种模式来渲染文档。

(2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。

(3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。

(4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现

语义化的理解

1,去掉或者丢失样式的时候能够让页面呈现出清晰的结构
2,有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;
3,方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;
4,便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。