WEB开发网
开发学院网页设计JavaScript Jquery源码分析---DOM元素(中) 阅读

Jquery源码分析---DOM元素(中)

 2010-09-14 13:36:33 来源:WEB开发网   
核心提示: Jquery也提供了通用的类似的方法,5.3.1 create在使用insert,update之前都必须要有元素,Jquery源码分析---DOM元素(中)(10),这个新增加的元素从那里来呢,就是得创建, var clone = ret.find("*").andSe

Jquery也提供了通用的类似的方法。

5.3.1 create

在使用insert,update之前都必须要有元素,这个新增加的元素从那里来呢,就是得创建,document提供了createElement来创建一个元素。别外一种方式就是clone。对原来的元素进行clone。Dom元素提供了cloneNode的方法。

Jquery也提供了类似的方法,jQuery.clean就是完成元素从HTMLstring的到Dom对象的创建。这个方法比document. createElement()提供了更好的兼容和更强大的功能。在3.1中已经介绍。

对于cloneNode,jquery的提供了类似方法如下:

// clone当前对象,events表明是否clone事件
clone : function(events) {
  // 对每个元素都进行加工(copy)后的集合重新构建jQuery对象
  var ret = this.map(function() {
    if (jQuery.browser.msie && !jQuery.isXMLDoc(this)) {
    // IE 中cloneNode不能copy 通过attachEvent增加的事件
    // 而innserHTML不能copy一些修改过的属性(仅作为属性储存)如input 的name
    var clone = this.cloneNode(true),
container = document.createElement("div");
      container.appendChild(clone);
      return jQuery.clean([container.innerHTML])[0];
      }
else  return this.cloneNode(true);
    });
  
  //需要把元素的扩展属性expando设为null.removeData在这里不起作用。
    var clone = ret.find("*").andSelf().each(function() {
      if (this[expando] != undefined)
       this[expando] = null;
    });
  
  if (events === true)// clone所有事件
    this.find("*").andSelf().each(function(i) {
      if (this.nodeType == 3) return;
      var events = jQuery.data(this, "events");
  
      for (var type in events)//为新元素增加clone的事件
       for (var handler in events[type])
        jQuery.event.add(clone[i], type,
events[type][handler],events[type][handler].data);
      });
  
    return ret;
  },

Clone提供了对于jquery对象的clone,在上面的代码中可以看出不光是clone了元素的本身,还为clone的元素clone了事件。

文章来源:http://jljlpch.javaeye.com/category/37744

上一页  5 6 7 8 9 10 

Tags:Jquery 源码 分析

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接