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
f2bcf87c
Commit
f2bcf87c
authored
Jun 23, 2015
by
Gilad Peleg
Committed by
Oleg Gaidarenko
Jun 25, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Attributes: fix IE8 issues
Follow-up for
d0388e9e
parent
d0388e9e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
105 additions
and
24 deletions
+105
-24
attr.js
src/attributes/attr.js
+77
-16
prop.js
src/attributes/prop.js
+28
-8
No files found.
src/attributes/attr.js
View file @
f2bcf87c
...
@@ -3,11 +3,14 @@ define([
...
@@ -3,11 +3,14 @@ define([
"../core/access"
,
"../core/access"
,
"./support"
,
"./support"
,
"../var/rnotwhite"
,
"../var/rnotwhite"
,
"./val"
,
"../selector"
"../selector"
],
function
(
jQuery
,
access
,
support
,
rnotwhite
)
{
],
function
(
jQuery
,
access
,
support
,
rnotwhite
)
{
var
boolHook
,
var
boolHook
,
attrHandle
=
jQuery
.
expr
.
attrHandle
;
attrHandle
=
jQuery
.
expr
.
attrHandle
,
ruseDefault
=
/^
(?:
checked|selected
)
$/i
,
getSetInput
=
support
.
input
;
jQuery
.
fn
.
extend
({
jQuery
.
fn
.
extend
({
attr
:
function
(
name
,
value
)
{
attr
:
function
(
name
,
value
)
{
...
@@ -15,7 +18,7 @@ jQuery.fn.extend({
...
@@ -15,7 +18,7 @@ jQuery.fn.extend({
},
},
removeAttr
:
function
(
name
)
{
removeAttr
:
function
(
name
)
{
return
this
.
each
(
function
()
{
return
this
.
each
(
function
()
{
jQuery
.
removeAttr
(
this
,
name
);
jQuery
.
removeAttr
(
this
,
name
);
});
});
}
}
...
@@ -74,6 +77,9 @@ jQuery.extend({
...
@@ -74,6 +77,9 @@ jQuery.extend({
set
:
function
(
elem
,
value
)
{
set
:
function
(
elem
,
value
)
{
if
(
!
support
.
radioValue
&&
value
===
"radio"
&&
if
(
!
support
.
radioValue
&&
value
===
"radio"
&&
jQuery
.
nodeName
(
elem
,
"input"
)
)
{
jQuery
.
nodeName
(
elem
,
"input"
)
)
{
// Setting the type on a radio button after the value resets the value in IE8-9
// Reset value to default in case type is set after value during creation
var
val
=
elem
.
value
;
var
val
=
elem
.
value
;
elem
.
setAttribute
(
"type"
,
value
);
elem
.
setAttribute
(
"type"
,
value
);
if
(
val
)
{
if
(
val
)
{
...
@@ -98,7 +104,15 @@ jQuery.extend({
...
@@ -98,7 +104,15 @@ jQuery.extend({
if
(
jQuery
.
expr
.
match
.
bool
.
test
(
name
)
)
{
if
(
jQuery
.
expr
.
match
.
bool
.
test
(
name
)
)
{
// Set corresponding property to false
// Set corresponding property to false
elem
[
propName
]
=
false
;
if
(
getSetInput
||
!
ruseDefault
.
test
(
name
)
)
{
elem
[
propName
]
=
false
;
// Support: IE<9
// Also clear defaultChecked/defaultSelected (if appropriate)
}
else
{
elem
[
jQuery
.
camelCase
(
"default-"
+
name
)
]
=
elem
[
propName
]
=
false
;
}
}
}
elem
.
removeAttribute
(
name
);
elem
.
removeAttribute
(
name
);
...
@@ -111,30 +125,77 @@ jQuery.extend({
...
@@ -111,30 +125,77 @@ jQuery.extend({
boolHook
=
{
boolHook
=
{
set
:
function
(
elem
,
value
,
name
)
{
set
:
function
(
elem
,
value
,
name
)
{
if
(
value
===
false
)
{
if
(
value
===
false
)
{
// Remove boolean attributes when set to false
// Remove boolean attributes when set to false
jQuery
.
removeAttr
(
elem
,
name
);
jQuery
.
removeAttr
(
elem
,
name
);
}
else
if
(
getSetInput
||
!
ruseDefault
.
test
(
name
)
)
{
elem
.
setAttribute
(
jQuery
.
propFix
[
name
]
||
name
,
name
);
}
else
{
}
else
{
elem
.
setAttribute
(
name
,
name
);
// Support: IE<9
// Use defaultChecked and defaultSelected for oldIE
elem
[
jQuery
.
camelCase
(
"default-"
+
name
)
]
=
elem
[
name
]
=
true
;
}
}
return
name
;
return
name
;
}
}
};
};
jQuery
.
each
(
jQuery
.
expr
.
match
.
bool
.
source
.
match
(
/
\w
+/g
),
function
(
i
,
name
)
{
jQuery
.
each
(
jQuery
.
expr
.
match
.
bool
.
source
.
match
(
/
\w
+/g
),
function
(
i
,
name
)
{
var
getter
=
attrHandle
[
name
]
||
jQuery
.
find
.
attr
;
var
getter
=
attrHandle
[
name
]
||
jQuery
.
find
.
attr
;
attrHandle
[
name
]
=
function
(
elem
,
name
,
isXML
)
{
if
(
getSetInput
||
!
ruseDefault
.
test
(
name
)
)
{
var
ret
,
handle
;
attrHandle
[
name
]
=
function
(
elem
,
name
,
isXML
)
{
if
(
!
isXML
)
{
var
ret
,
handle
;
// Avoid an infinite loop by temporarily removing this function from the getter
if
(
!
isXML
)
{
handle
=
attrHandle
[
name
];
attrHandle
[
name
]
=
ret
;
// Avoid an infinite loop by temporarily removing this function from the getter
ret
=
getter
(
elem
,
name
,
isXML
)
!=
null
?
handle
=
attrHandle
[
name
];
name
.
toLowerCase
()
:
attrHandle
[
name
]
=
ret
;
null
;
ret
=
getter
(
elem
,
name
,
isXML
)
!=
null
?
attrHandle
[
name
]
=
handle
;
name
.
toLowerCase
()
:
null
;
attrHandle
[
name
]
=
handle
;
}
return
ret
;
};
}
else
{
attrHandle
[
name
]
=
function
(
elem
,
name
,
isXML
)
{
if
(
!
isXML
)
{
return
elem
[
jQuery
.
camelCase
(
"default-"
+
name
)
]
?
name
.
toLowerCase
()
:
null
;
}
};
}
});
// fix oldIE attroperties
if
(
!
getSetInput
)
{
jQuery
.
attrHooks
.
value
=
{
set
:
function
(
elem
,
value
)
{
if
(
jQuery
.
nodeName
(
elem
,
"input"
)
)
{
// Does not return so that setAttribute is also used
elem
.
defaultValue
=
value
;
}
}
}
return
ret
;
};
};
});
}
if
(
!
support
.
style
)
{
jQuery
.
attrHooks
.
style
=
{
get
:
function
(
elem
)
{
// Return undefined in the case of empty string
// Note: IE uppercases css property names, but if we were to .toLowerCase()
// .cssText, that would destroy case sensitivity in URL's, like in "background"
return
elem
.
style
.
cssText
||
undefined
;
},
set
:
function
(
elem
,
value
)
{
return
(
elem
.
style
.
cssText
=
value
+
""
);
}
};
}
});
});
src/attributes/prop.js
View file @
f2bcf87c
...
@@ -5,7 +5,8 @@ define([
...
@@ -5,7 +5,8 @@ define([
"../selector"
"../selector"
],
function
(
jQuery
,
access
,
support
)
{
],
function
(
jQuery
,
access
,
support
)
{
var
rfocusable
=
/^
(?:
input|select|textarea|button
)
$/i
;
var
rfocusable
=
/^
(?:
input|select|textarea|button|object
)
$/i
,
rclickable
=
/^
(?:
a|area
)
$/i
;
jQuery
.
fn
.
extend
({
jQuery
.
fn
.
extend
({
prop
:
function
(
name
,
value
)
{
prop
:
function
(
name
,
value
)
{
...
@@ -13,8 +14,13 @@ jQuery.fn.extend({
...
@@ -13,8 +14,13 @@ jQuery.fn.extend({
},
},
removeProp
:
function
(
name
)
{
removeProp
:
function
(
name
)
{
name
=
jQuery
.
propFix
[
name
]
||
name
;
return
this
.
each
(
function
()
{
return
this
.
each
(
function
()
{
delete
this
[
jQuery
.
propFix
[
name
]
||
name
];
// try/catch handles cases where IE balks (such as removing a property on window)
try
{
this
[
name
]
=
undefined
;
delete
this
[
name
];
}
catch
(
e
)
{}
});
});
}
}
});
});
...
@@ -55,10 +61,18 @@ jQuery.extend({
...
@@ -55,10 +61,18 @@ jQuery.extend({
propHooks
:
{
propHooks
:
{
tabIndex
:
{
tabIndex
:
{
get
:
function
(
elem
)
{
get
:
function
(
elem
)
{
return
elem
.
hasAttribute
(
"tabindex"
)
||
// elem.tabIndex doesn't always return the
rfocusable
.
test
(
elem
.
nodeName
)
||
elem
.
href
?
// correct value when it hasn't been explicitly set
elem
.
tabIndex
:
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-
1
;
// Use proper attribute retrieval(#12072)
var
tabindex
=
jQuery
.
find
.
attr
(
elem
,
"tabindex"
);
return
tabindex
?
parseInt
(
tabindex
,
10
)
:
rfocusable
.
test
(
elem
.
nodeName
)
||
rclickable
.
test
(
elem
.
nodeName
)
&&
elem
.
href
?
0
:
-
1
;
}
}
}
}
},
},
...
@@ -73,8 +87,14 @@ if ( !support.optSelected ) {
...
@@ -73,8 +87,14 @@ if ( !support.optSelected ) {
jQuery
.
propHooks
.
selected
=
{
jQuery
.
propHooks
.
selected
=
{
get
:
function
(
elem
)
{
get
:
function
(
elem
)
{
var
parent
=
elem
.
parentNode
;
var
parent
=
elem
.
parentNode
;
if
(
parent
&&
parent
.
parentNode
)
{
parent
.
parentNode
.
selectedIndex
;
if
(
parent
)
{
parent
.
selectedIndex
;
// Make sure that it also works with optgroups, see #5701
if
(
parent
.
parentNode
)
{
parent
.
parentNode
.
selectedIndex
;
}
}
}
return
null
;
return
null
;
}
}
...
...
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