Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прототипы для Node на IE 
:(
    Опции темы
anthonyBoard
Дата 10.12.2008, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Доброй ночи!

Уважаемые товарищи, помогите вразумить IE. Ну ни в какую он не хочет создавать прототипы для Node.

Пробовал такой вариант:
Код

if(window.Node && !Node.prototype){
    var node = document.createTextNode('');
    var Node = node.constructor;
}
if(window.Node){
    Node.prototype.моя_функция= function(){

    }
}

но IE это не вразумило, он начинает ругаться при обращении document.getElementById('id элемента').моя_функция().
"моя_функция" - это конечно не настоящее название функции, а getElementById - получает хендл DIV'а.


Заранее благодарен за помощь!
PM MAIL   Вверх
anthonyBoard
Дата 11.12.2008, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Что-то такое подозрение, что IE не поддерживает прототипы для DOM. Ни для Element ни для Node прототипы не создаются.

У кого-нибудь есть какие соображения на эту тему?
PM MAIL   Вверх
IDVsbruck
Дата 12.12.2008, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



document.getElementById('id элемента') возвращает не Node, а Object.
Поэтому от назначения нового метода для Node ты ничего не выигрывашь.
А ИЕ очень даже хорошо поддерживает прототипы.

Кстати, из описаний:
"Свойство prototype позволяет расширить функциональность встроенных объектов JavaScript."

Встроенные объекты - это String, Array, Function, Date, Object и др.
PM MAIL   Вверх
An6rey
Дата 12.12.2008, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.10.2008

Репутация: 1
Всего: 5



IDVsbruck, в IE Object не наследуется элементами. Для этого в prototype.js при доступе к элементу эти свойства дописываются программно.
Но использовать дополнительные свойства в Object является плохим ходом. Это давно обсуждалось и является одним их плюсов jQuery, которая оставляет в покое Object.prototype. Отрицательных момента по крайней мере два:
1) С JSON объектом не получится работать как с ассоциативным массивом (появятся лишние свойства)
2) С массивами нельзя будет работать при помощи цикла for...in
PM MAIL   Вверх
IDVsbruck
Дата 12.12.2008, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Цитата(An6rey @  12.12.2008,  01:14 Найти цитируемый пост)
IE Object не наследуется элементами

Да ну??? А как же постулат js, что все есть объект? - от строки до документа ...
PM MAIL   Вверх
Zeroglif
Дата 12.12.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(IDVsbruck @  12.12.2008,  05:55 Найти цитируемый пост)
Да ну??? А как же постулат js, что все есть объект? - от строки до документа ... 

Если под постулатом понимать тиражируемую глупость, то да, постулат... ;)
PM MAIL WWW   Вверх
anthonyBoard
Дата 14.12.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Цитата(IDVsbruck @  12.12.2008,  00:12 Найти цитируемый пост)
document.getElementById('id элемента') возвращает не Node, а Object.

а не Element?
Почему же все браузеры кроме IE работают как и предполагается?

Если я создам прототип
Element.prototype.функция или Node.prototype.функция - Mozilla, Opera, Safari будут дальше с этим работать без каких либо проблем.

Добавлено @ 00:17
Хотя может быть действительно возвращается Object, но тогда почему, опять таки, не возникает никаких проблем в вышеуказанных трех браузерах?

Это сообщение отредактировал(а) anthonyBoard - 14.12.2008, 00:19
PM MAIL   Вверх
anthonyBoard
Дата 3.1.2009, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 11.8.2008
Где: Russia, Obninsk

Репутация: нет
Всего: нет



Решил вернуться к этой теме, т.к. вопрос до сих пор не решен.

Существуют ли какие-нибудь варианты, чтобы добавить объекту функцию? Просто хочется красоты и аккуратности в коде.

Вот тут речь шла о программном добавлении функций, это на сколько я понимаю делается следующим образом:
1. Функция $ получает хендел элемента
2. Добавляет функции
3. Возвращает все это дело

Я правильно понял?
Думаю в моем случае это будет единственный и верный вариант.

И еще терзает вопрос, почему в Firefox и Opera работает вариант, если я добавляю прототипы в Node и getElementById потом получаю объект - все функции прототипные Node доступны, а в IE нет. Firefox и Opera возвращают в getElementById Node?
PM MAIL   Вверх
An6rey
Дата 3.1.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 13.10.2008

Репутация: 1
Всего: 5



Да ты понял правильно.
В Опере и ФФ это так потому что они так написаны.
По поводу ИЕ нужно еще сказать спасибо, что можно использовать тот вариант который ты описал ($)
Они могли бы не давать и ту возможность и тупо реализовать спецификацию DOM (DHTML) без возможности добавлять новые функции и свойства.


PM MAIL   Вверх
DenVdmj
Дата 3.2.2009, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



anthonyBoard, читайте тут: http://forum.vingrad.ru/forum/topic-189669/view-all.html

+ еще: http://forum.vingrad.ru/act-ST/f-74/t-175689.html

Это сообщение отредактировал(а) DenVdmj - 3.2.2009, 07:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0921 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.