Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jquery
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
夏彬
jquery
Commits
f0366306
Commit
f0366306
authored
Dec 18, 2009
by
jeresig
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Brought the attributes module more inline with the jQuery style guidelines.
parent
99d83fbd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
58 additions
and
35 deletions
+58
-35
attributes.js
src/attributes.js
+58
-35
No files found.
src/attributes.js
View file @
f0366306
var
rclass
=
/
[\n\t]
/g
;
var
rclass
=
/
[\n\t]
/g
,
rspace
=
/
\s
+/
,
rreturn
=
/
\r
/g
,
rspecialurl
=
/href|src|style/
,
rtype
=
/
(
button|input
)
/i
,
rfocusable
=
/
(
button|input|object|select|textarea
)
/i
,
rclickable
=
/^
(
a|area
)
$/i
;
jQuery
.
fn
.
extend
({
jQuery
.
fn
.
extend
({
attr
:
function
(
name
,
value
)
{
attr
:
function
(
name
,
value
)
{
return
access
(
this
,
name
,
value
,
true
,
jQuery
.
attr
);
return
access
(
this
,
name
,
value
,
true
,
jQuery
.
attr
);
},
},
addClass
:
function
(
value
)
{
addClass
:
function
(
value
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
return
this
.
each
(
function
()
{
return
this
.
each
(
function
()
{
jQuery
(
this
).
addClass
(
value
.
call
(
this
)
);
jQuery
(
this
).
addClass
(
value
.
call
(
this
)
);
});
});
}
}
if
(
value
&&
typeof
value
===
"string"
)
{
if
(
value
&&
typeof
value
===
"string"
)
{
var
classNames
=
(
value
||
""
).
split
(
/
\s
+/
);
var
classNames
=
(
value
||
""
).
split
(
rspace
);
for
(
var
i
=
0
,
l
=
this
.
length
;
i
<
l
;
i
++
)
{
for
(
var
i
=
0
,
l
=
this
.
length
;
i
<
l
;
i
++
)
{
var
elem
=
this
[
i
];
var
elem
=
this
[
i
];
...
@@ -21,6 +27,7 @@ jQuery.fn.extend({
...
@@ -21,6 +27,7 @@ jQuery.fn.extend({
if
(
elem
.
nodeType
===
1
)
{
if
(
elem
.
nodeType
===
1
)
{
if
(
!
elem
.
className
)
{
if
(
!
elem
.
className
)
{
elem
.
className
=
value
;
elem
.
className
=
value
;
}
else
{
}
else
{
var
className
=
" "
+
elem
.
className
+
" "
;
var
className
=
" "
+
elem
.
className
+
" "
;
for
(
var
c
=
0
,
cl
=
classNames
.
length
;
c
<
cl
;
c
++
)
{
for
(
var
c
=
0
,
cl
=
classNames
.
length
;
c
<
cl
;
c
++
)
{
...
@@ -37,14 +44,14 @@ jQuery.fn.extend({
...
@@ -37,14 +44,14 @@ jQuery.fn.extend({
},
},
removeClass
:
function
(
value
)
{
removeClass
:
function
(
value
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
return
this
.
each
(
function
()
{
return
this
.
each
(
function
()
{
jQuery
(
this
).
removeClass
(
value
.
call
(
this
)
);
jQuery
(
this
).
removeClass
(
value
.
call
(
this
)
);
});
});
}
}
if
(
(
value
&&
typeof
value
===
"string"
)
||
value
===
undefined
)
{
if
(
(
value
&&
typeof
value
===
"string"
)
||
value
===
undefined
)
{
var
classNames
=
(
value
||
""
).
split
(
/
\s
+/
);
var
classNames
=
(
value
||
""
).
split
(
rspace
);
for
(
var
i
=
0
,
l
=
this
.
length
;
i
<
l
;
i
++
)
{
for
(
var
i
=
0
,
l
=
this
.
length
;
i
<
l
;
i
++
)
{
var
elem
=
this
[
i
];
var
elem
=
this
[
i
];
...
@@ -56,6 +63,7 @@ jQuery.fn.extend({
...
@@ -56,6 +63,7 @@ jQuery.fn.extend({
className
=
className
.
replace
(
" "
+
classNames
[
c
]
+
" "
,
" "
);
className
=
className
.
replace
(
" "
+
classNames
[
c
]
+
" "
,
" "
);
}
}
elem
.
className
=
className
.
substring
(
1
,
className
.
length
-
1
);
elem
.
className
=
className
.
substring
(
1
,
className
.
length
-
1
);
}
else
{
}
else
{
elem
.
className
=
""
;
elem
.
className
=
""
;
}
}
...
@@ -82,20 +90,22 @@ jQuery.fn.extend({
...
@@ -82,20 +90,22 @@ jQuery.fn.extend({
var
elem
=
this
[
0
];
var
elem
=
this
[
0
];
if
(
elem
)
{
if
(
elem
)
{
if
(
jQuery
.
nodeName
(
elem
,
'option'
)
)
{
if
(
jQuery
.
nodeName
(
elem
,
"option"
)
)
{
return
(
elem
.
attributes
.
value
||
{}).
specified
?
elem
.
value
:
elem
.
text
;
return
(
elem
.
attributes
.
value
||
{}).
specified
?
elem
.
value
:
elem
.
text
;
}
}
// We need to handle select boxes special
// We need to handle select boxes special
if
(
jQuery
.
nodeName
(
elem
,
"select"
)
)
{
if
(
jQuery
.
nodeName
(
elem
,
"select"
)
)
{
var
index
=
elem
.
selectedIndex
,
var
index
=
elem
.
selectedIndex
,
values
=
[],
values
=
[],
options
=
elem
.
options
,
options
=
elem
.
options
,
one
=
elem
.
type
==
"select-one"
;
one
=
elem
.
type
==
=
"select-one"
;
// Nothing was selected
// Nothing was selected
if
(
index
<
0
)
{
if
(
index
<
0
)
{
return
null
;
return
null
;
}
}
// Loop through all the selected options
// Loop through all the selected options
for
(
var
i
=
one
?
index
:
0
,
max
=
one
?
index
+
1
:
options
.
length
;
i
<
max
;
i
++
)
{
for
(
var
i
=
one
?
index
:
0
,
max
=
one
?
index
+
1
:
options
.
length
;
i
<
max
;
i
++
)
{
var
option
=
options
[
i
];
var
option
=
options
[
i
];
...
@@ -108,6 +118,7 @@ jQuery.fn.extend({
...
@@ -108,6 +118,7 @@ jQuery.fn.extend({
if
(
one
)
{
if
(
one
)
{
return
value
;
return
value
;
}
}
// Multi-Selects return an array
// Multi-Selects return an array
values
.
push
(
value
);
values
.
push
(
value
);
}
}
...
@@ -117,7 +128,7 @@ jQuery.fn.extend({
...
@@ -117,7 +128,7 @@ jQuery.fn.extend({
}
}
// Everything else, we just grab the value
// Everything else, we just grab the value
return
(
elem
.
value
||
""
).
replace
(
/
\r
/g
,
""
);
return
(
elem
.
value
||
""
).
replace
(
rreturn
,
""
);
}
}
...
@@ -128,25 +139,28 @@ jQuery.fn.extend({
...
@@ -128,25 +139,28 @@ jQuery.fn.extend({
if
(
typeof
value
===
"number"
)
{
if
(
typeof
value
===
"number"
)
{
value
+=
''
;
value
+=
''
;
}
}
var
val
=
value
;
var
val
=
value
;
return
this
.
each
(
function
(){
return
this
.
each
(
function
(){
if
(
jQuery
.
isFunction
(
value
)
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
val
=
value
.
call
(
this
);
val
=
value
.
call
(
this
);
// Typecast each time if the value is a Function and the appended
// Typecast each time if the value is a Function and the appended
// value is therefore different each time.
// value is therefore different each time.
if
(
typeof
val
===
"number"
)
{
if
(
typeof
val
===
"number"
)
{
val
+=
''
;
val
+=
''
;
}
}
}
}
if
(
this
.
nodeType
!=
1
)
{
if
(
this
.
nodeType
!=
=
1
)
{
return
;
return
;
}
}
if
(
jQuery
.
isArray
(
val
)
&&
/radio|checkbox/
.
test
(
this
.
type
)
)
{
if
(
jQuery
.
isArray
(
val
)
&&
/radio|checkbox/
.
test
(
this
.
type
)
)
{
this
.
checked
=
jQuery
.
inArray
(
this
.
value
||
this
.
name
,
val
)
>=
0
;
this
.
checked
=
jQuery
.
inArray
(
this
.
value
||
this
.
name
,
val
)
>=
0
;
}
else
if
(
jQuery
.
nodeName
(
this
,
"select"
)
)
{
}
else
if
(
jQuery
.
nodeName
(
this
,
"select"
)
)
{
var
values
=
jQuery
.
makeArray
(
val
);
var
values
=
jQuery
.
makeArray
(
val
);
jQuery
(
"option"
,
this
).
each
(
function
(){
jQuery
(
"option"
,
this
).
each
(
function
(){
...
@@ -156,6 +170,7 @@ jQuery.fn.extend({
...
@@ -156,6 +170,7 @@ jQuery.fn.extend({
if
(
!
values
.
length
)
{
if
(
!
values
.
length
)
{
this
.
selectedIndex
=
-
1
;
this
.
selectedIndex
=
-
1
;
}
}
}
else
{
}
else
{
this
.
value
=
val
;
this
.
value
=
val
;
}
}
...
@@ -173,27 +188,31 @@ jQuery.each({
...
@@ -173,27 +188,31 @@ jQuery.each({
toggleClass
:
function
(
classNames
,
state
)
{
toggleClass
:
function
(
classNames
,
state
)
{
var
type
=
typeof
classNames
;
var
type
=
typeof
classNames
;
if
(
type
===
"string"
)
{
if
(
type
===
"string"
)
{
// toggle individual class names
// toggle individual class names
var
isBool
=
typeof
state
===
"boolean"
,
className
,
i
=
0
,
var
isBool
=
typeof
state
===
"boolean"
,
className
,
i
=
0
,
classNames
=
classNames
.
split
(
/
\s
+/
);
classNames
=
classNames
.
split
(
rspace
);
while
(
(
className
=
classNames
[
i
++
])
)
{
while
(
(
className
=
classNames
[
i
++
])
)
{
// check each className given, space seperated list
// check each className given, space seperated list
state
=
isBool
?
state
:
!
jQuery
(
this
).
hasClass
(
className
);
state
=
isBool
?
state
:
!
jQuery
(
this
).
hasClass
(
className
);
jQuery
(
this
)[
state
?
"addClass"
:
"removeClass"
](
className
);
jQuery
(
this
)[
state
?
"addClass"
:
"removeClass"
](
className
);
}
}
}
else
if
(
type
===
"undefined"
||
type
===
"boolean"
)
{
}
else
if
(
type
===
"undefined"
||
type
===
"boolean"
)
{
if
(
this
.
className
)
{
if
(
this
.
className
)
{
// store className if set
// store className if set
jQuery
.
data
(
this
,
"__className__"
,
this
.
className
);
jQuery
.
data
(
this
,
"__className__"
,
this
.
className
);
}
}
// toggle whole className
// toggle whole className
this
.
className
=
this
.
className
||
classNames
===
false
?
""
:
jQuery
.
data
(
this
,
"__className__"
)
||
""
;
this
.
className
=
this
.
className
||
classNames
===
false
?
""
:
jQuery
.
data
(
this
,
"__className__"
)
||
""
;
}
}
}
}
},
function
(
name
,
fn
){
},
function
(
name
,
fn
){
jQuery
.
fn
[
name
]
=
function
(
val
,
state
){
jQuery
.
fn
[
name
]
=
function
(
val
,
state
){
if
(
jQuery
.
isFunction
(
val
)
)
{
if
(
jQuery
.
isFunction
(
val
)
)
{
return
this
.
each
(
function
()
{
jQuery
(
this
)[
name
](
val
.
call
(
this
),
state
);
});
return
this
.
each
(
function
()
{
jQuery
(
this
)[
name
](
val
.
call
(
this
),
state
);
});
}
}
...
@@ -215,7 +234,7 @@ jQuery.extend({
...
@@ -215,7 +234,7 @@ jQuery.extend({
attr
:
function
(
elem
,
name
,
value
)
{
attr
:
function
(
elem
,
name
,
value
)
{
// don't set attributes on text and comment nodes
// don't set attributes on text and comment nodes
if
(
!
elem
||
elem
.
nodeType
==
3
||
elem
.
nodeType
==
8
)
{
if
(
!
elem
||
elem
.
nodeType
===
3
||
elem
.
nodeType
===
8
)
{
return
undefined
;
return
undefined
;
}
}
...
@@ -232,55 +251,58 @@ jQuery.extend({
...
@@ -232,55 +251,58 @@ jQuery.extend({
// Only do all the following if this is a node (faster for style)
// Only do all the following if this is a node (faster for style)
if
(
elem
.
nodeType
===
1
)
{
if
(
elem
.
nodeType
===
1
)
{
// These attributes require special treatment
// These attributes require special treatment
var
special
=
/href|src|style/
.
test
(
name
);
var
special
=
rspecialurl
.
test
(
name
);
// Safari mis-reports the default selected property of a hidden option
// Safari mis-reports the default selected property of a hidden option
// Accessing the parent's selectedIndex property fixes it
// Accessing the parent's selectedIndex property fixes it
if
(
name
==
"selected"
&&
elem
.
parentNode
)
{
if
(
name
==
=
"selected"
&&
elem
.
parentNode
)
{
elem
.
parentNode
.
selectedIndex
;
elem
.
parentNode
.
selectedIndex
;
}
}
// If applicable, access the attribute via the DOM 0 way
// If applicable, access the attribute via the DOM 0 way
if
(
name
in
elem
&&
notxml
&&
!
special
)
{
if
(
name
in
elem
&&
notxml
&&
!
special
)
{
if
(
set
)
{
if
(
set
)
{
// We can't allow the type property to be changed (since it causes problems in IE)
// We can't allow the type property to be changed (since it causes problems in IE)
if
(
name
==
"type"
&&
/
(
button|input
)
/i
.
test
(
elem
.
nodeName
)
&&
elem
.
parentNode
)
{
if
(
name
==
=
"type"
&&
rtype
.
test
(
elem
.
nodeName
)
&&
elem
.
parentNode
)
{
throw
"type property can't be changed"
;
throw
"type property can't be changed"
;
}
}
// browsers index elements by id/name on forms, give priority to attributes.
// browsers index elements by id/name on forms, give priority to attributes.
if
(
jQuery
.
nodeName
(
elem
,
"form"
)
)
{
if
(
jQuery
.
nodeName
(
elem
,
"form"
)
)
{
// convert the value to a string (all browsers do this but IE) see #1070
// convert the value to a string (all browsers do this but IE) see #1070
elem
.
setAttribute
(
name
,
""
+
value
);
elem
.
setAttribute
(
name
,
""
+
value
);
}
else
{
}
else
{
elem
[
name
]
=
value
;
elem
[
name
]
=
value
;
}
}
}
}
// browsers index elements by id/name on forms, give priority to attributes.
// browsers index elements by id/name on forms, give priority to attributes.
if
(
jQuery
.
nodeName
(
elem
,
"form"
)
&&
elem
.
getAttributeNode
(
name
)
)
{
if
(
jQuery
.
nodeName
(
elem
,
"form"
)
&&
elem
.
getAttributeNode
(
name
)
)
{
return
elem
.
getAttributeNode
(
name
).
nodeValue
;
return
elem
.
getAttributeNode
(
name
).
nodeValue
;
}
}
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
if
(
name
==
"tabIndex"
)
{
if
(
name
==
=
"tabIndex"
)
{
var
attributeNode
=
elem
.
getAttributeNode
(
"tabIndex"
);
var
attributeNode
=
elem
.
getAttributeNode
(
"tabIndex"
);
return
attributeNode
&&
attributeNode
.
specified
?
attributeNode
.
value
return
attributeNode
&&
attributeNode
.
specified
?
:
/
(
button|input|object|select|textarea
)
/i
.
test
(
elem
.
nodeName
)
attributeNode
.
value
:
?
0
rfocusable
.
test
(
elem
.
nodeName
)
||
rclickable
.
test
(
elem
.
nodeName
)
&&
elem
.
href
?
:
/^
(
a|area
)
$/i
.
test
(
elem
.
nodeName
)
&&
elem
.
href
0
:
?
0
undefined
;
:
undefined
;
}
}
return
elem
[
name
];
return
elem
[
name
];
}
}
if
(
!
jQuery
.
support
.
style
&&
notxml
&&
name
==
"style"
)
{
if
(
!
jQuery
.
support
.
style
&&
notxml
&&
name
==
=
"style"
)
{
if
(
set
)
{
if
(
set
)
{
elem
.
style
.
cssText
=
""
+
value
;
elem
.
style
.
cssText
=
""
+
value
;
}
}
return
elem
.
style
.
cssText
;
return
elem
.
style
.
cssText
;
}
}
...
@@ -288,10 +310,11 @@ jQuery.extend({
...
@@ -288,10 +310,11 @@ jQuery.extend({
// convert the value to a string (all browsers do this but IE) see #1070
// convert the value to a string (all browsers do this but IE) see #1070
elem
.
setAttribute
(
name
,
""
+
value
);
elem
.
setAttribute
(
name
,
""
+
value
);
}
}
var
attr
=
!
jQuery
.
support
.
hrefNormalized
&&
notxml
&&
special
var
attr
=
!
jQuery
.
support
.
hrefNormalized
&&
notxml
&&
special
?
// Some attributes require a special call on IE
// Some attributes require a special call on IE
?
elem
.
getAttribute
(
name
,
2
)
elem
.
getAttribute
(
name
,
2
)
:
:
elem
.
getAttribute
(
name
);
elem
.
getAttribute
(
name
);
// Non-existent attributes return null, we normalize to undefined
// Non-existent attributes return null, we normalize to undefined
return
attr
===
null
?
undefined
:
attr
;
return
attr
===
null
?
undefined
:
attr
;
...
@@ -299,6 +322,6 @@ jQuery.extend({
...
@@ -299,6 +322,6 @@ jQuery.extend({
// elem is actually elem.style ... set the style
// elem is actually elem.style ... set the style
// Using attr for specific style information is now deprecated. Use style insead.
// Using attr for specific style information is now deprecated. Use style insead.
return
jQuery
.
style
(
elem
,
name
,
value
);
return
jQuery
.
style
(
elem
,
name
,
value
);
}
}
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment