Перегрузка Object.prototype

Рейтинг: 0Ответов: 1Опубликовано: 07.02.2011

Есть объект на странице:

<div id="obj" style="position:absolute;top:20px;">test</div>

Нужно перегрузить событие:

alert(document.getElementById('obj').style.top);

таким образом, чтобы алерт выдал, например 1000px

Дошел пока до этого:

Object.prototype.style = function() {
return Parent;
}
Object.prototype.style.top = '1000px';
document.getElementById = function() {
return this;
}

Но данная реализация перезаписывает getElementById, что совсем нехорошо.

Вопрос: как же это реализовать?

UPD: Задача такова: Есть верстка, доступа к которой я не имею, но имею право вывести в body в самое начало элемент div высотой 100px. Чтобы все абсолютно позиционированные элементы не поехали, я по ним пробегусь и прибавлю +100px, а вот чтобы родной js верстки просчитывал верно мне нужно переопределить функцию top. Я ясно изъясняюсь?

UPD2: Представьте такую верстку:

<html>
<body>
[[HERE]]
<div style="position:absolute;top:100px;left:100px;" id="div1">BLOCK</div>
<div style="position:absolute;top:200px;left:200px;">BLOCK</div>
<a href="#">CLICK ME!</a>
</body>
</html>

[[HERE]] - то самое место, где я размещаю div высотой 100px. И вот что я должен сделать, чтобы событие onclick при нажатии на линк отрабатывалось не в 200px, а в 300px?

UPD3: Js может сделать, например вот так:

<html>
<body>
[[HERE]]
<div id="div1">BLOCK</div>
<div style="position:absolute;top:200px;left:200px;">BLOCK</div>
<a href="#">CLICK ME!</a>
</body>
</html>

Ответы

▲ 2Принят

Хм.

<div style="height: 100px; margin-bottom: -100px;"></div>

Не пойдет? И почему в этот DIV не засунуть элемент [style] или как-то по-другому не обойти? Вы ведь скрипт можете вписать, значит, стили тоже должны быть доступны.

UPD:

function topPlus100(tagNames) {
  for (var tn in tagNames) {
    var els = document.getElementsByTagName(tagNames[tn]);
    for (i = 0; i < els.length; i++)
      if (els[i].style.position == 'absolute')
        els[i].style.top = (els[i].offsetTop+100)+'px';
    }
  }

Еще UPD: еще логичнее переписать родной JS верстки) Вообще очень бы посмотрел на верстку, где элементы спозиционированы относительно body с помощью JS =/


Ну раз уж я взялся))

<style type="text/css">.corrector { position: relative; margin-top: 100px; clear: both; }</style>
<style type="text/javacsript">
function topPlus100(tagNames) {
  for (var tn in tagNames) {
    var els = document.getElementsByTagName(tagNames[tn]);
    for (i = 0; i < els.length; i++)
      if ((els[i].style.position == 'absolute') && (typeof(els[i].childNodes[0]) != 'undefined') && (els[i].childNodes[0].className!='corrector'))
        els[i].innerHTML = 
          '<div class="corrector"></div>'
          +els[i].innerHTML;
    }
  }
</script>

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


Тогда читаем тут , намекаю на top = (parseInt(_top)+100)+'px';