Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.05.2016, 16:00
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

Node.prototype в ие 8
решил написать метод который возвращал бы всех потомков. Прочитал что все DOM объекты налсдедуют методы от Node.prototype. Закинул я в Node.prototype функцию ниже и всё работает да вот только не в ие 8, где объекта Node вообще нету, так вот вопрос откуда тогда DOM элементы наследуют методы и свойства в 8ие?
Чтобы туда закинуть этот метод и как вообще определить от какого объекта происходит наследование?? если б не прочитал про Node.prototype, то так бы и не понял, что именно в него нужно записывать метод, также можно в Object.prototype, но тогда это затронит все объекты, а мне это не нужно ( кстати и через Object.prototype в ие 8 борода((( )

Node.prototype.getAll = function () {

	var c = this.children,
    mas = [];

  (function f(node) {
    
  	for (var i=0; i < node.length; i++) {
    
     mas.push(node[i]);
     
     if (!node[i].children.length) continue
     
     else {
     
     	 var k = node[i].children;

     	 f(k);
     
     }

    }
  
  
  })(c);

return mas;
}

console.log(document.documentElement.getAll())

Последний раз редактировалось DynkanMaclaud, 08.05.2016 в 16:04.
Ответить с цитированием
  #2 (permalink)  
Старый 09.05.2016, 15:00
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

в ие 8 Все DOM элементы наследуют свойства от объекта Element, поэтому для того чтобы добавить свой метод или свойства ко всем объектам DOM и чтобы этот метод был кроссбраузерным, то следует записывать ваш метод или свойство в прототип Element.prototype.
Element.prototype.getAll = function () {

	var c = this.children,
    mas = [];

  (function f(node) {
    
  	for (var i=0; i < node.length; i++) {
    
     mas.push(node[i]);
     
     if (!node[i].children.length) continue
     
     else {
     
     	 var k = node[i].children;

     	 f(k);
     
     }

    }
  
  
  })(c);

return mas;
}

console.log(document.documentElement.getAll())
Ответить с цитированием
  #3 (permalink)  
Старый 11.05.2016, 22:13
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

Rise,
querySelectorAll в ие 8 не работает, а про getElementsByTagName(*), запамятовал)))) Да и не в самом методе суть, а то что не мог найти объект в прототип которого его можно было вставить...

Последний раз редактировалось DynkanMaclaud, 11.05.2016 в 22:19.
Ответить с цитированием
  #4 (permalink)  
Старый 11.05.2016, 22:36
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

Rise,
ссылка 0
блин а я вот этому ресурсу доверился...
Ответить с цитированием
  #5 (permalink)  
Старый 11.05.2016, 22:39
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

Rise,
а у тебя сейчас какой год*))))?
Ответить с цитированием
  #6 (permalink)  
Старый 11.05.2016, 22:54
Аватар для DynkanMaclaud
Профессор
Отправить личное сообщение для DynkanMaclaud Посмотреть профиль Найти все сообщения от DynkanMaclaud
 
Регистрация: 08.08.2014
Сообщений: 261

Rise,
не спорю что-то я недооценил поддержку querySelector, спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск