jQuery attr("value") 和 val的区别


1
2
3
4
5
6
7
8
9
10
11
12
13
//2509行
if  ( !getSetInput || !getSetAttribute ) {
jQuery.attrHooks.value = {
         get:  function ( elem, name ) {
             var  ret = elem.getAttributeNode( name );
             return  jQuery.nodeName( elem,  "input"  ) ?
 
                 // Ignore the value *property* by using defaultValue
                 elem.defaultValue :
 
                 ret && ret.specified ? ret.value : undefined;
         },
}


这边返回值的逻辑判断有变化

jQuery.nodeName( elem, "input" ) ?elem.defaultValue :ret && ret.specified ? ret.value :undefined;

// Ignore the value *property* by using defaultValue
要我们使用defaultValue.


JavaScript code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
attrHooks: {
     type: {
         set:  function ( elem, value ) {
             if  ( !jQuery.support.radioValue && value ===  "radio"  && jQuery.nodeName(elem,  "input" ) ) {
                 // Setting the type on a radio button after the value resets the value in IE6-9
                 // Reset value to default in case type is set after value during creation
                 var  val = elem.value;
                 elem.setAttribute(  "type" , value );
                 if  ( val ) {
                     elem.value = val;
                 }
                 return  value;
             }
         }
     }
},




而1.8.3代码如下

JavaScript code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//2361行
     attrHooks: {
         type: {
             set:  function ( elem, value ) {
                 // We can't allow the type property to be changed (since it causes problems in IE)
                 if  ( rtype.test( elem.nodeName ) && elem.parentNode ) {
                     jQuery.error(  "type property can't be changed"  );
                 else  if  ( !jQuery.support.radioValue && value ===  "radio"  && jQuery.nodeName(elem,  "input" ) ) {
                     // Setting the type on a radio button after the value resets the value in IE6-9
                     // Reset value to it's default in case type is set after value
                     // This is for element creation
                     var  val = elem.value;
                     elem.setAttribute(  "type" , value );
                     if  ( val ) {
                         elem.value = val;
                     }
                     return  value;
                 }
             }
         },
         // Use the value property for back compat
         // Use the nodeHook for button elements in IE6/7 (#1954)
         value: {
             get:  function ( elem, name ) {
                 if  ( nodeHook && jQuery.nodeName( elem,  "button"  ) ) {
                     return  nodeHook.get( elem, name );
                 }
                 return  name  in  elem ?
                     elem.value :
                     null ;
             },
             set:  function ( elem, value, name ) {
                 if  ( nodeHook && jQuery.nodeName( elem,  "button"  ) ) {
                     return  nodeHook.set( elem, value, name );
                 }
                 // Does not return so that setAttribute is also used
                 elem.value = value;
             }
         }
     },



可见1.9删除了attrHooks.value方法导致非IE的attr("value")为undefined或默认值,
而IE的attr("value")为""或默认值


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值