2011-01-06 2 views
3

Я пытаюсь расширить DOM. Я «подклассы» от Div элемента:Какие объекты JS можно добавить через appendChild()?

var Subclass = function() {} 
Subclass.prototype = document.createElement('div'); 
Subclass.constructor = Subclass; 

var obj = new Subclass(); 
var obj.innerHTML = 'test'; 
document.body.appendChild(obj); // Exception: Node cannot be inserted ... point in the hierarchy 

Так что если прототип объекта является объектом DOM не будет делать то, что является требованием для объекта, который будет вставлен в DOM?

+0

связанный: http://stackoverflow.com/questions/779880/in-javascript-can-you-extend-the-dom – Hamish

ответ

0

Это действительно работает в Firefox .. В любом случае. На самом деле он не будет создавать новые элементы при создании нового подкласса, но будет продолжать использовать то же самое.

В любом случае, я бы сказал, что объекты DOM являются «особыми» в том смысле, что только они могут быть appendChild'd.

+0

В Firefox он не работает. 'var obj = новый подкласс(); obj.innerHTML = "test"; document.body.appendChild (obj); 'дает ошибку. –

+0

Странно, это сработало для меня. Он фактически добавил div в документ. –

0

Согласно спецификации W3C appendChild():

  1. Возвращает Node.
  2. Throws DOMException.
  3. Требуется один аргумент типа Node.

От specification:

Node appendChild(in Node newChild) raises(DOMException); 
0

, если вы хотите расширить только Div элементы, то может быть, вы можете сделать это

HTMLDivElement.prototype.newFunction = function() { //'this' will get that div dom } 

тогда она будет распространяться только элементы DIV .. работы на FF, не знаете о других браузерах.

надеюсь, что это может вам помочь.

Смежные вопросы