annotate default/node_modules/jquery/src/attributes/attr.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 define( [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 "../core",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 "../core/access",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "../core/nodeName",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./support",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 "../var/rnothtmlwhite",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 "../selector"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 ], function( jQuery, access, nodeName, support, rnothtmlwhite ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 var boolHook,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 attrHandle = jQuery.expr.attrHandle;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 jQuery.fn.extend( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 attr: function( name, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 return access( this, jQuery.attr, name, value, arguments.length > 1 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 removeAttr: function( name ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 return this.each( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 jQuery.removeAttr( this, name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 jQuery.extend( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 attr: function( elem, name, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 var ret, hooks,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 nType = elem.nodeType;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 // Don't get/set attributes on text, comment and attribute nodes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 if ( nType === 3 || nType === 8 || nType === 2 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 // Fallback to prop when attributes are not supported
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 if ( typeof elem.getAttribute === "undefined" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 return jQuery.prop( elem, name, value );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 // Attribute hooks are determined by the lowercase version
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 // Grab necessary hook if one is defined
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 if ( value !== undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 if ( value === null ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 jQuery.removeAttr( elem, name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 if ( hooks && "set" in hooks &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 elem.setAttribute( name, value + "" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 return value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 ret = jQuery.find.attr( elem, name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 // Non-existent attributes return null, we normalize to undefined
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 return ret == null ? undefined : ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 attrHooks: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 type: {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 set: function( elem, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 if ( !support.radioValue && value === "radio" &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 nodeName( elem, "input" ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 var val = elem.value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 elem.setAttribute( "type", value );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 if ( val ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 elem.value = val;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 return value;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 removeAttr: function( elem, value ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 var name,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 i = 0,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 // Attribute names can contain non-HTML whitespace characters
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 attrNames = value && value.match( rnothtmlwhite );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 if ( attrNames && elem.nodeType === 1 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 while ( ( name = attrNames[ i++ ] ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 elem.removeAttribute( name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 // Hooks for boolean attributes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 boolHook = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 set: function( elem, value, name ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 if ( value === false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 // Remove boolean attributes when set to false
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 jQuery.removeAttr( elem, name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 elem.setAttribute( name, name );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116 return name;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 var getter = attrHandle[ name ] || jQuery.find.attr;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 attrHandle[ name ] = function( elem, name, isXML ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 var ret, handle,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 lowercaseName = name.toLowerCase();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 if ( !isXML ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 // Avoid an infinite loop by temporarily removing this function from the getter
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 handle = attrHandle[ lowercaseName ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 attrHandle[ lowercaseName ] = ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 ret = getter( elem, name, isXML ) != null ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 lowercaseName :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 attrHandle[ lowercaseName ] = handle;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 return ret;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 } );