установить ширину div через javascript onDomReady

#javascript #html #mootools

#javascript #HTML #mootools

Вопрос:

Я использую mootools 1.2 на странице, где я загружаю js-график в div, который сам находится в ячейке таблицы. График загружается правильно, но он намного меньше ширины ячейки (сценарий graph предназначен для генерации графика того же размера, что и div).

Мой вопрос: как вы можете динамически устанавливать размер div на основе размера его родительского контейнера (вместо того, чтобы устанавливать фиксированную ширину div в пикселях).

Я хотел бы установить размер div с помощью mootools setStyle на domready, вот так (все завернуто в domready блок):

 var divwidth    = $('my_chart').offsetParent.offsetWidth;
var divheight   = $('my_chart').offsetParent.offsetHeight;
$('my_chart').setStyle('width', divwidth);
$('my_chart').setStyle('height', divheight);

g           = new Dygraph($('my_chart'), data);
  

Когда я запускаю страницу без setStyle, это работает, но div возвращает ширину 480 при выполнении $('my_chart').getStyle('width'); из консоли js. Однако $('my_chart').offsetParent.offsetWidth из той же консоли возвращается значение 1100.

Проблема в том, что когда я пытаюсь установить размер div с помощью приведенного выше кода, он выдает ошибку: Uncaught TypeError: Cannot read property 'offsetWidth' of null Я полагаю, потому что div еще не нарисован?

Отредактируйте, чтобы добавить: если я установлю ширину my_chart div на «auto», я получу сообщение об ошибке Uncaught TypeError: Cannot read property 'length' of undefined из скрипта graph.

Спасибо за любую помощь.

Комментарии:

1. Вот jsfiddle страницы: jsfiddle.net/vYe5J/7

Ответ №1:

http://jsfiddle.net/dimitar/c7GTA/

jsfiddle тут же возвращается к вам.

проблема в том, что этот инструмент использует canvas. и это похоже на то, нужно ли установить ширину canvas на заданное значение.

 var c = document.id("mychart");
c.setStyle("width", c.getParent().getSize().x);

new Dygraph(document.id("mychart"),
"Date,Temperaturen"   "2008-05-07,75n"   "2008-05-08,70n"   "2008-05-09,80n"
);
  

это работает нормально, но изменение размера таблицы сделает это странным.
используйте .getSize(), который возвращает объект со свойствами x и y для ширины и высоты. не доверяйте вычислениям, основанным на css / style.