Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сохранить элементы в массив (https://javascript.ru/forum/dom-window/14217-sokhranit-ehlementy-v-massiv.html)

FL@$H 06.01.2011 13:33

Сохранить элементы в массив
 
Только начал изучать JS. Не могу найти ответ на следующий вопрос.
Хочу создавать обьекты на странице динамичесски и в последующем их двигать в зависимости от класса.
Думал делать так:
<script language="javascript" type="text/javascript">
var i=0; // global
function create_objects()
	{
		var obj[i] = document.createElement('div');
		obj[i].className = "object_1";
		
		parent = document.getElementsByTagName('body')[0];
		parent.appendChild(obj[i]);
         window.i++;
}

Перед </html> вызываю
<script type="text/javascript">
		window.onload = create_object();
	</script>

Если сделать всё без масивов, а просто
var obj = document.createElement('div')
и т.д., то всё работает хорошо. Но с массивами было бы удобно хранить обьекты и в дальнейшем взаимодействовать с ними. Можно ли сделать так, как я хочу?

И второй вопрос. Создал 2 обьекта с одинаковым классом. Они успешно отобразились на экране... Потом попробовали поменять их позиции следующим образом.
function move_object()
	{
		var a = document.getElementsByClassName(object_1');
		for(i=0;i<2;i++)
		{
			var objs = document.getElementsByClassName('object_1')[i];
			objs.style.marginTop = "200px";
		}

А оно видит только getElementsByClassName('object_1')[0], а getElementsByClassName('object_1')[1] нет... В чем может быть причина?

}

ksa 06.01.2011 14:00

Цитата:

Сообщение от FL@$H
А оно видит только getElementsByClassName('object_1')[0], а getElementsByClassName('object_1')[1] нет... В чем может быть причина?

Например его действительно нет...

А в чем причина использования именно class, а не id например?

FL@$H 08.01.2011 18:40

Цитата:

Например его действительно нет
Firebug показывает 2 дива одного класс и на экране они отображаются коректно.
Хочу сделать в даный момент, чтобы на экране отображался эфект пробегания планет по экрану. Взял картинки 3 планет, сохранил. Хочу на них создать 3 класса и дальше создавать обьекты этих классов и двигать их. Чтобы было много планет. Потом одни удалять, другие создавать и т.д. Для этого решил попробовать работать с массивами, чтобы проще было... А никак...

x-yuri 08.01.2011 20:11

Цитата:

Сообщение от FL@$H
var obj[i] = document.createElement('div');

у переменной не может быть имени obj[i]

Цитата:

Сообщение от FL@$H
parent = document.getElementsByTagName('body')[0];

всегда объявляй переменные с помощью var (var parent = ...). Ты только что изменил значение глобальной переменной

кроме того, получить доступ к body можно намного проще: document.body

Цитата:

Сообщение от FL@$H
Перед </html> вызываю
<script type="text/javascript">         window.onload = create_object();     </script>

если ты размещаешь скрипт перед закрывающим тэгом body, нету смысла использовать window.onload

кроме того, create_object() - это вызов функции, а ты собирался назначить обработчик события: window.onload = create_object;

Цитата:

Сообщение от FL@$H
Но с массивами было бы удобно хранить обьекты и в дальнейшем взаимодействовать с ними.

var planets = [];
var names = ['Mercury', 'Venus', 'Earth'];
for( var i=0; i<names.length; i++ ){
    var planet = document.createElement('div');
    planet.className = 'planet';
    planet.innerHTML = names[i];
    document.body.appendChild( planet );
    planets.push( planet );
}


Цитата:

Сообщение от FL@$H
var i=0; // global

не используй глобальные переменные, тем более в случаях, когда это не нужно

Цитата:

Сообщение от FL@$H
var a = document.getElementsByClassName(object_1');

getElementsByClassName - это не кроссбраузерно

Цитата:

Сообщение от FL@$H
А оно видит только getElementsByClassName('object_1')[0], а getElementsByClassName('object_1')[1] нет...

как ты определил, что оно не видит getElementsByClassName('object_1')[1]? Оно не может не видеть:
<!DOCTYPE HTML>
<html>
  <head>   
  </head>
  <body>   

  <div class="object_1"></div>
  <div class="object_1"></div>

  <script>
    alert(document.getElementsByClassName('object_1').length);
  </script>
  
  </body>
</html>

FL@$H 10.01.2011 10:39

x-yuri,
Спасибо большое за такой информативный ответ. После него все проблемы и вопросы отпали.
как ты определил, что оно не видит getElementsByClassName('object_1')[1]? Оно не может не видеть

Я что-то натупил. Всё получилось.


Часовой пояс GMT +3, время: 22:55.