[JS, IE] Как навесить метод на html-объект?

kruzer25

Если тупо создать новый метод через Object.prototype - он не появится у html-ных объектов (у тех, которые в document.all хотя нормально работает у всех остальных объектов. typeof(document.all[0]) - object, так что непонятно, в чём может быть дело. В гугле ничего по теме найти не смог.
Как добавить метод doSomething ко всем объектам так, чтобы работало, к примеру, document.all[0].doSomething ? Конечно, без того, чтобы руками проходить по всем элементам и навешивать на каждый из них этот метод; а потом городить костыли, чтобы он появлялся у свежесозданных объектов (тогда уж легче глобальную функцию сделать).

klyv

если я правильно тебя понял, в jQuery это как-то делается, стоит там посмотреть.

kruzer25

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

Bibi

ну, типа есть делегированная обработка событий (то, что происходит в jQuery.fn.live и livequery похоже, не происходит, но, все равно, есть).
но вообще, ты же про другое спрашиваешь, хотя тебе тоже можно ввести систему событий, которые ты будешь дергать по необходимости.
может, это даже улучшит код в конкретном случае.
если так, то погугли nwevents. сам не юзал, но по, описанию, довольно легкая и чисто сделанная штука

Serega009

Говорят, реализация DOM в IE не разрешает JS доступ к прототипу HTMLElement/Node.
http://www.codingforums.com/showthread.php?t=70378
В FF такое работает на ура:
<html>

<head>
<title>Test DOM</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>

<body>
<script language="JavaScript" type="text/javascript">
<!--
var el;
if (typeof(HTMLElement) != 'undefined' && typeof(HTMLElement.prototype) != 'undefined')
{
HTMLElement.prototype.doSmth = function { alert("Here"); };
el = document.createElement("p");
el.onclick = function { this.doSmth; };
el.appendChild(document.createTextNode(text;
document.body.appendChild(el);
}
// -->
</script>
</body>

</html>
Оставить комментарий
Имя или ник:
Комментарий: