标签:style http io ar os 使用 sp for strong
标准:传入一个标签名,支持非标准的标签名 document.createElement("c")
IE6-7:可以传入连同用户一起生成
document.createElement("<input name=‘name‘>")
eg:
//http://thunderguy.com/semicolon/2005/05/23/setting-the-name-attribute-in-internet-explorer/
function createNamedElement(type, name) {
    var element = null;
    // Try the IE way; this fails on standards-compliant browsers
    try {
        element = document.createElement(‘<‘ + type + ‘ name="‘ + name + ‘">‘);
    } catch (e) {
    }
    if (!element || element.nodeName != type.toUpperCase()) {
        // Non-IE browser; use canonical method to create named element
        element = document.createElement(type);
        element.name = name;
    }
    return element;
}
innerHTML的创建效率比createElement快2到10倍
测试代码
var start = new Date();
for(var i = 0 ;i<1000;i++){
  document.createElement("c");
}
var end = new Date();
console.log(end-start)
var start = new Date();
var str =""
for(var i = 0 ;i<1000;i++){
  str += "<c></c>"
}
  document.innerHTML=str;
var end = new Date();
console.log(end-start)
测试结果却是快了最少2倍
innerHTML可以一次生成一大堆结点。
注释,style,script,link,meta,noscriptinsertAdjacentHTML是IE私有实现的产物,兼容性比较差。有灵活的插入方式
如果不支持的insetAdjacentHTML,模拟的如下:
if (typeof HTMLElement !== "undefined" &&
        !HTMLElement.prototype.insertAdjacentElement) {
    HTMLElement.prototype.insertAdjacentElement = function(where, parsedNode) {
        switch (where.toLowerCase()) {
            case ‘beforebegin‘:
                this.parentNode.insertBefore(parsedNode, this)
                break;
            case ‘afterbegin‘:
                this.insertBefore(parsedNode, this.firstChild);
                break;
            case ‘beforeend‘:
                this.appendChild(parsedNode);
                break;
            case ‘afterend‘:
                if (this.nextSibling)
                    this.parentNode.insertBefore(parsedNode, this.nextSibling);
                else
                    this.parentNode.appendChild(parsedNode);
                break;
        }
    }
    HTMLElement.prototype.insertAdjacentHTML = function(where, htmlStr) {
        var r = this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML = r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where, parsedHTML)
    }
    HTMLElement.prototype.insertAdjacentText = function(where, txtStr) {
        var parsedText = document.createTextNode(txtStr)
        this.insertAdjacentElement(where, parsedText)
    }
}
是Range对象的一个实力方法。相当于insertAdjacentHTML直接将内容插入到DOM树,createContextFragment允许将字符串转换为文档碎片。
通过两个构造器与一个原型实现无new实例化,这样的话链式操作不会被new关键字打断
function $(a, b) { //第一个构造器
    return new $.fn.init(a, b); //第二个构造器
}
//将原型对象放到一个名字更短、更好记的属性中
//这是jQuery人性化的体现,也方便扩展原型方法
$.fn = $.prototype = {
    init: function(a, b) {
        this.a = a;
        this.b = b;
    }
}
//共用同一个原型
$.fn.init.prototype = $.fn;
var a = $(1, 2);
console.log(a instanceof $); //true
console.log(a instanceof $.fn.init); //true
////TODO
实现html需要注意的事情
如何实现
对应浏览器处理问题
标签:style http io ar os 使用 sp for strong
原文地址:http://www.cnblogs.com/fyking/p/4154306.html