Как добавить функции JavaScript в объекты DOM без jQuery?

Как мне сделать что-то вроде следующего, но только для объектов DOM, а не для всех объектов:

Object.prototype.hide = function() {
  this.style.display = 'none';
};

Пожалуйста, используйте только чистый JavaScript, без jQuery или других сторонних библиотек.

Также, пожалуйста, прокомментируйте стандарты вашего решения и кросс-браузерную совместимость.


person ma11hew28    schedule 11.03.2011    source источник
comment
Вы должны использовать jQuery или другую библиотеку. Если ты этого не делаешь, ты делаешь это неправильно.   -  person Stefan Kendall    schedule 11.03.2011
comment
@Stefan: я самый большой сторонник jQuery, которого вы найдете, но даже я не скажу ничего подобного. Делать неправильно? Нет. Очень вероятно, что вы делаете это неправильно и более запутанным образом? Почти наверняка. Почти.   -  person treeface    schedule 11.03.2011
comment
Нет. Ты делаешь это неправильно. Я не создаю веб-приложения с помощью сборки и не создаю ничего, что касается DOM без фреймворка/библиотеки.   -  person Stefan Kendall    schedule 11.03.2011
comment
Для совместимости с IE вам придется использовать объект-оболочку или какой-либо другой изобретательный метод. В конце концов, ‹ваша любимая библиотека здесь›, вероятно, делает это, поэтому, если вы не делаете это для обучения, это, вероятно, не стоит затраченных усилий.   -  person Reid    schedule 11.03.2011
comment
@Stefan: Не будь таким догматичным. DOM не так уж сложен, даже с учетом различий в браузерах, и без jQuery или его эквивалента можно обойтись, если вы знаете, что делаете. Что касается сравнения сборки и... чего? JavaScript? ... это просто немного глупо.   -  person Tim Down    schedule 11.03.2011
comment
См. соответствующие stackoverflow.com/questions/592815/   -  person Crescent Fresh    schedule 11.03.2011


Ответы (2)


Элементы в DOM используют HTMLElement в качестве своего прототипа, так что в идеальном мире вы бы просто добавили к этому.

HTMLElement.prototype.hide = function() {
    this.style.display = 'none';
};

НО: это не работает в IE, так что боюсь.

person Sean Kinsey    schedule 11.03.2011

Рекомендуем прочитать о том, как prototype расширяет DOM.

И для идеи внутри кода (который слишком велик, чтобы воспроизвести его здесь) вы можете найти здесь (найдите Element.extend).

Другими словами, они не могут расширять объекты с самого начала, поэтому они расширяют их каждой из своих функций, которые возвращают элементы DOM.

person mhitza    schedule 16.03.2011