Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.01.2011, 13:33
Новичок на форуме
Отправить личное сообщение для FL@$H Посмотреть профиль Найти все сообщения от FL@$H
 
Регистрация: 06.01.2011
Сообщений: 3

Сохранить элементы в массив
Только начал изучать 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] нет... В чем может быть причина?

}
Ответить с цитированием
  #2 (permalink)  
Старый 06.01.2011, 14:00
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

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

А в чем причина использования именно class, а не id например?
Ответить с цитированием
  #3 (permalink)  
Старый 08.01.2011, 18:40
Новичок на форуме
Отправить личное сообщение для FL@$H Посмотреть профиль Найти все сообщения от FL@$H
 
Регистрация: 06.01.2011
Сообщений: 3

Цитата:
Например его действительно нет
Firebug показывает 2 дива одного класс и на экране они отображаются коректно.
Хочу сделать в даный момент, чтобы на экране отображался эфект пробегания планет по экрану. Взял картинки 3 планет, сохранил. Хочу на них создать 3 класса и дальше создавать обьекты этих классов и двигать их. Чтобы было много планет. Потом одни удалять, другие создавать и т.д. Для этого решил попробовать работать с массивами, чтобы проще было... А никак...
Ответить с цитированием
  #4 (permalink)  
Старый 08.01.2011, 20:11
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от 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>
Ответить с цитированием
  #5 (permalink)  
Старый 10.01.2011, 10:39
Новичок на форуме
Отправить личное сообщение для FL@$H Посмотреть профиль Найти все сообщения от FL@$H
 
Регистрация: 06.01.2011
Сообщений: 3

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

Я что-то натупил. Всё получилось.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многомерный массив javascript simple Общие вопросы Javascript 20 03.11.2010 02:11
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Как удалить повторные элементы из массива? YISHIMITSY Общие вопросы Javascript 1 04.05.2010 00:04
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30
добавить элементы в ассоциативный массив noer Элементы интерфейса 7 14.05.2009 10:41