mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix(forEach): allow looping over result of querySelectorAll in IE8
In IE8 the result object of calling `node.querySelectorAll` does not have a `hasOwnPropery` function. However, it should be usable with `forEach`. Related to #5400.
This commit is contained in:
parent
f0e3dfd008
commit
274a6734ef
2 changed files with 18 additions and 1 deletions
|
|
@ -213,7 +213,9 @@ function forEach(obj, iterator, context) {
|
|||
if (obj) {
|
||||
if (isFunction(obj)){
|
||||
for (key in obj) {
|
||||
if (key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key)) {
|
||||
// Need to check if hasOwnProperty exists,
|
||||
// as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
|
||||
if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
|
||||
iterator.call(context, obj[key], key);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -504,6 +504,21 @@ describe('angular', function() {
|
|||
expect(log).toEqual(['0:a', '1:c']);
|
||||
});
|
||||
|
||||
if (document.querySelectorAll) {
|
||||
it('should handle the result of querySelectorAll in IE8 as it has no hasOwnProperty function', function() {
|
||||
document.body.innerHTML = "<p>" +
|
||||
"<a name='x'>a</a>" +
|
||||
"<a name='y'>b</a>" +
|
||||
"<a name='x'>c</a>" +
|
||||
"</p>";
|
||||
|
||||
var htmlCollection = document.querySelectorAll('[name="x"]'),
|
||||
log = [];
|
||||
|
||||
forEach(htmlCollection, function(value, key) { log.push(key + ':' + value.innerHTML)});
|
||||
expect(log).toEqual(['0:a', '1:c']);
|
||||
});
|
||||
}
|
||||
|
||||
it('should handle arguments objects like arrays', function() {
|
||||
var args,
|
||||
|
|
|
|||
Loading…
Reference in a new issue