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
({
attr
:
function
(
name
,
value
)
{
return
access
(
this
,
name
,
value
,
true
,
jQuery
.
attr
);
return
access
(
this
,
name
,
value
,
true
,
jQuery
.
attr
);
},
addClass
:
function
(
value
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
return
this
.
each
(
function
()
{
jQuery
(
this
).
addClass
(
value
.
call
(
this
)
);
});
}
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
++
)
{
var
elem
=
this
[
i
];
...
...
@@ -21,6 +27,7 @@ jQuery.fn.extend({
if
(
elem
.
nodeType
===
1
)
{
if
(
!
elem
.
className
)
{
elem
.
className
=
value
;
}
else
{
var
className
=
" "
+
elem
.
className
+
" "
;
for
(
var
c
=
0
,
cl
=
classNames
.
length
;
c
<
cl
;
c
++
)
{
...
...
@@ -37,14 +44,14 @@ jQuery.fn.extend({
},
removeClass
:
function
(
value
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
return
this
.
each
(
function
()
{
jQuery
(
this
).
removeClass
(
value
.
call
(
this
)
);
});
}
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
++
)
{
var
elem
=
this
[
i
];
...
...
@@ -56,6 +63,7 @@ jQuery.fn.extend({
className
=
className
.
replace
(
" "
+
classNames
[
c
]
+
" "
,
" "
);
}
elem
.
className
=
className
.
substring
(
1
,
className
.
length
-
1
);
}
else
{
elem
.
className
=
""
;
}
...
...
@@ -82,20 +90,22 @@ jQuery.fn.extend({
var
elem
=
this
[
0
];
if
(
elem
)
{
if
(
jQuery
.
nodeName
(
elem
,
'option'
)
)
{
if
(
jQuery
.
nodeName
(
elem
,
"option"
)
)
{
return
(
elem
.
attributes
.
value
||
{}).
specified
?
elem
.
value
:
elem
.
text
;
}
// We need to handle select boxes special
if
(
jQuery
.
nodeName
(
elem
,
"select"
)
)
{
var
index
=
elem
.
selectedIndex
,
values
=
[],
options
=
elem
.
options
,
one
=
elem
.
type
==
"select-one"
;
one
=
elem
.
type
==
=
"select-one"
;
// Nothing was selected
if
(
index
<
0
)
{
return
null
;
}
// Loop through all the selected options
for
(
var
i
=
one
?
index
:
0
,
max
=
one
?
index
+
1
:
options
.
length
;
i
<
max
;
i
++
)
{
var
option
=
options
[
i
];
...
...
@@ -108,6 +118,7 @@ jQuery.fn.extend({
if
(
one
)
{
return
value
;
}
// Multi-Selects return an array
values
.
push
(
value
);
}
...
...
@@ -117,7 +128,7 @@ jQuery.fn.extend({
}
// 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({
if
(
typeof
value
===
"number"
)
{
value
+=
''
;
}
var
val
=
value
;
return
this
.
each
(
function
(){
if
(
jQuery
.
isFunction
(
value
)
)
{
if
(
jQuery
.
isFunction
(
value
)
)
{
val
=
value
.
call
(
this
);
// Typecast each time if the value is a Function and the appended
// value is therefore different each time.
if
(
typeof
val
===
"number"
)
{
if
(
typeof
val
===
"number"
)
{
val
+=
''
;
}
}
if
(
this
.
nodeType
!=
1
)
{
if
(
this
.
nodeType
!=
=
1
)
{
return
;
}
if
(
jQuery
.
isArray
(
val
)
&&
/radio|checkbox/
.
test
(
this
.
type
)
)
{
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
);
jQuery
(
"option"
,
this
).
each
(
function
(){
...
...
@@ -156,6 +170,7 @@ jQuery.fn.extend({
if
(
!
values
.
length
)
{
this
.
selectedIndex
=
-
1
;
}
}
else
{
this
.
value
=
val
;
}
...
...
@@ -173,27 +188,31 @@ jQuery.each({
toggleClass
:
function
(
classNames
,
state
)
{
var
type
=
typeof
classNames
;
if
(
type
===
"string"
)
{
// toggle individual class names
var
isBool
=
typeof
state
===
"boolean"
,
className
,
i
=
0
,
classNames
=
classNames
.
split
(
/
\s
+/
);
classNames
=
classNames
.
split
(
rspace
);
while
(
(
className
=
classNames
[
i
++
])
)
{
// check each className given, space seperated list
state
=
isBool
?
state
:
!
jQuery
(
this
).
hasClass
(
className
);
jQuery
(
this
)[
state
?
"addClass"
:
"removeClass"
](
className
);
}
}
else
if
(
type
===
"undefined"
||
type
===
"boolean"
)
{
if
(
this
.
className
)
{
// store className if set
jQuery
.
data
(
this
,
"__className__"
,
this
.
className
);
}
// toggle whole className
this
.
className
=
this
.
className
||
classNames
===
false
?
""
:
jQuery
.
data
(
this
,
"__className__"
)
||
""
;
}
}
},
function
(
name
,
fn
){
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
);
});
}
...
...
@@ -215,7 +234,7 @@ jQuery.extend({
attr
:
function
(
elem
,
name
,
value
)
{
// 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
;
}
...
...
@@ -232,55 +251,58 @@ jQuery.extend({
// Only do all the following if this is a node (faster for style)
if
(
elem
.
nodeType
===
1
)
{
// 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
// Accessing the parent's selectedIndex property fixes it
if
(
name
==
"selected"
&&
elem
.
parentNode
)
{
if
(
name
==
=
"selected"
&&
elem
.
parentNode
)
{
elem
.
parentNode
.
selectedIndex
;
}
// If applicable, access the attribute via the DOM 0 way
if
(
name
in
elem
&&
notxml
&&
!
special
)
{
if
(
set
)
{
// 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"
;
}
// browsers index elements by id/name on forms, give priority to attributes.
if
(
jQuery
.
nodeName
(
elem
,
"form"
)
)
{
// convert the value to a string (all browsers do this but IE) see #1070
elem
.
setAttribute
(
name
,
""
+
value
);
}
else
{
elem
[
name
]
=
value
;
}
}
// 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
;
}
// 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/
if
(
name
==
"tabIndex"
)
{
if
(
name
==
=
"tabIndex"
)
{
var
attributeNode
=
elem
.
getAttributeNode
(
"tabIndex"
);
return
attributeNode
&&
attributeNode
.
specified
?
attributeNode
.
value
:
/
(
button|input|object|select|textarea
)
/i
.
test
(
elem
.
nodeName
)
?
0
:
/^
(
a|area
)
$/i
.
test
(
elem
.
nodeName
)
&&
elem
.
href
?
0
:
undefined
;
return
attributeNode
&&
attributeNode
.
specified
?
attributeNode
.
value
:
rfocusable
.
test
(
elem
.
nodeName
)
||
rclickable
.
test
(
elem
.
nodeName
)
&&
elem
.
href
?
0
:
undefined
;
}
return
elem
[
name
];
}
if
(
!
jQuery
.
support
.
style
&&
notxml
&&
name
==
"style"
)
{
if
(
!
jQuery
.
support
.
style
&&
notxml
&&
name
==
=
"style"
)
{
if
(
set
)
{
elem
.
style
.
cssText
=
""
+
value
;
}
return
elem
.
style
.
cssText
;
}
...
...
@@ -288,10 +310,11 @@ jQuery.extend({
// convert the value to a string (all browsers do this but IE) see #1070
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
?
elem
.
getAttribute
(
name
,
2
)
:
elem
.
getAttribute
(
name
);
elem
.
getAttribute
(
name
,
2
)
:
elem
.
getAttribute
(
name
);
// Non-existent attributes return null, we normalize to undefined
return
attr
===
null
?
undefined
:
attr
;
...
...
@@ -299,6 +322,6 @@ jQuery.extend({
// elem is actually elem.style ... set the style
// 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