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

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

 2010-09-14 13:36:29 来源:WEB开发网   
核心提示: 5.4.3 value// 获得第一个匹配元素的当前值,// 在 jQuery 1.2 中,可以返回任意元素的值了,Jquery源码分析---DOM元素(下)(7),包括select,如果多选, this.value = value; });},5.4.4 contentJquery的Co

5.4.3 value

// 获得第一个匹配元素的当前值。
// 在 jQuery 1.2 中,可以返回任意元素的值了。包括select。如果多选,将返回一个数组,其包含所选的值。
// 设置每一个匹配元素的值。在 jQuery 1.2, 这也可以为select元件赋值
val : function(value) {
  if (value == undefined) {//取值
    if (this.length) {//如果当前jquery对象不是空集合
      var elem = this[0];
      //对select中option,我们会采用<option>xx</option>
//<option value=xx/>的形式
      if (jQuery.nodeName(elem, 'option')) //value属性是否选中
       return (elem.attributes.value || {}).specified            ? elem.value: elem.text;
      //处理select的value
      if (jQuery.nodeName(elem, "select")) {
       var index = elem.selectedIndex, values = [],
options = elem.options, one = elem.type == "select-one";
       if (index < 0) return null;//没有选中选择项
       // 不管是单选还是多选,找到所有的选中的选项
       //对于单选而言,这样的判断实现减少for的次数,提高效率
       //一般的实现都是直接采用for循环,可见jquery代码之优化
       for (var i = one ? index : 0, max = one
             ? index + 1  : options.length;i < max; i++) {
         var option = options[i];
         if (option.selected) {
          // 嵌套调用本函数,调用其option的部分进行处理,
//找到option的指定的值
           value = jQuery(option).val();        
             if (one) return value;  //单选直接返回值
             values.push(value);//多选返回数组
           }
         }
         return values;         
       } else//不要进行特殊的处理,但要去回车符
       return (this[0].value || "").replace(/r/g, "");
      }
      //空集合时返回
      return undefined;
    }
if (value.constructor == Number)value += '';//转换成字符的形式
  
return this.each(function() {
    if (this.nodeType != 1) return;//不是元素不处理。
    //如果元素是radio|checkbox,设定的值为Array的形式
    //那么本元素的value值或name值在数组中,就设定为选中。
    if (value.constructor == Array
        && /radio|checkbox/.test(this.type))
    this.checked = (jQuery.inArray(this.value, value) >= 0 || jQuery
             .inArray(this.name, value) >= 0);
    //如果元素是select,先把value转换成数组
    //再判断其options的value在这个数组中不,在的话,就设定为选中。
    else if (jQuery.nodeName(this, "select")) {
      var values = jQuery.makeArray(value);
      jQuery("option", this).each(function() {//给option设值
      this.selected = (jQuery.inArray(this.value,
       values) >= 0 || jQuery.inArray( this.text, values) >= 0);
      });
       if (!values.length) this.selectedIndex = -1;//如果空值    } else //其他的不要特殊处理,直接设值。
      this.value = value;
    });
},

5.4.4 content

Jquery的Content其实就是元素的所有的子元素的集合。

jQuery.each( {
    contents : function(elem) {// iframe?就是文档,或者所有子节点
      return jQuery.nodeName(elem, "iframe") ? elem.contentDocument
         || elem.contentWindow.document : jQuery
         .makeArray(elem.childNodes);
    }
  }, function(name, fn) {// 注册到jQuery对象中去,可以调用同名方法
      jQuery.fn[name] = function(selector) {
       var ret = jQuery.map(this, fn);// 每个元素都执行同名方法
       if (selector && typeof selector == "string")
         ret = jQuery.multiFilter(selector, ret);// 过滤元素集
      return this.pushStack(jQuery.unique(ret));// 构建jQuery对象
      };
   });

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

上一页  2 3 4 5 6 7 

Tags:Jquery 源码 分析

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