Javascript.RU

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

Выбор нужного элемента дом дерева
Доброго времени суток, вот по чуть учу Js и столкнулся с задачей, которую не получается решить. Может вы подскажите в чем моя ошибка.
Задача: Вот так выглядит страница. В каждом вложенном диве есть еще элементы. Задача поменять местами второй и третий див. У них есть классы но нет Id. Обязательно делать именно жс и кроссбраузерно.
<div id="content-wrap">
  <div></div>
  <div></div>
  <div></div>
</div>

Вот я написал такое дело
var main = document.getElementById('content-wrap')
var divall = main.getElementsByTagName('div')
main.appendChild(divall[1])

Логика моя: Выбрали див с ид content-wrap. Пробежались по нему и выбрали все div. Див который второй взяли и перекинули в конец родителя. При таком коде мне Лисичка пишет

TypeError: main is null
var divall= main.getElementsByTagName('div')

Последний раз редактировалось Elve, 18.08.2012 в 14:54.
Ответить с цитированием
  #2 (permalink)  
Старый 18.08.2012, 15:02
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
<div id='wrapper'> 
    <div>1 </div>
    <div> 2</div>
    <div>3 </div>
    <div> 4</div>
  </div>  
  <script>

var wrapper_ = document.getElementById('wrapper');

var elem =  wrapper_.children[1];
   
 wrapper_.insertBefore(elem, wrapper_.children[3])  
    


    </script>

  </body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 18.08.2012, 21:45
Интересующийся
Отправить личное сообщение для Elve Посмотреть профиль Найти все сообщения от Elve
 
Регистрация: 11.06.2012
Сообщений: 25

Спасибо большое, как же все просто было...
Ответить с цитированием
  #4 (permalink)  
Старый 18.08.2012, 22:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

main is null
Т.е. нет элемента с таким id. С вероятностью 100% вы запускаете скрипт раньше чем в коде появляется данный элемент. Javscript выполняется по мере загрузки, а не после.(если вы специально того не обозначите)

...
<div id="content-wrap">
  <div>1</div>
  <div>2</div>
  <div>3</div>
</div>
<script type="text/javascript">
var main = document.getElementById('content-wrap')
var divall = main.getElementsByTagName('div')
main.appendChild(divall[1])
</script>
__________________
29375, 35

Последний раз редактировалось Aetae, 18.08.2012 в 23:03.
Ответить с цитированием
  #5 (permalink)  
Старый 18.08.2012, 23:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

И да, решение от cyber, не будет работать если элементов 3, надо так:
var wrapper_ = document.getElementById('wrapper');
var elem =  wrapper_.children[1];
wrapper_.insertBefore(elem, wrapper_.children[3] || null) //ксли вторым параметром null - работает как appeendChild, а если undefined - кидает ошибку
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 18.08.2012, 23:21
Интересующийся
Отправить личное сообщение для Elve Посмотреть профиль Найти все сообщения от Elve
 
Регистрация: 11.06.2012
Сообщений: 25

А вот у меня возник еще один вопрос, задача стояла куда более обширно нежели тут описал в итоге поучил вот такой код
<script>
	var wrapper_ = document.getElementById('content-wrap');
	var elem =  wrapper_.children[4];
	var after_main =  wrapper_.children[2];
	after_main.style.width = "900px";
	var after_main_stage1 = after_main.children[0];
	var after_main_stage2 = after_main.children[1];
	after_main_stage1.style.cssText = "float:left;\ ";
	after_main_stage1.rule.style.cssText = "float:left;\ ";
	after_main_stage2.style.cssText = "float:left;\ ";
	var after_main_stage3 = after_main_stage2.children[1];
	after_main_stage3.style.cssText = "float:left;\
	width:300px;\ " ;
 	wrapper_.insertBefore(elem, wrapper_.children[2]) 
	wrapper_.children[2].style.width = "940px";
	var cat_ch3 = elem.children[0];
	var cat_ch4 = cat_ch3.children[1];
	var light = elem.children[1];
	var light2 = elem.children[2];
	cat_ch4.parentNode.insertBefore(light2, cat_ch4.nextSibling);
	cat_ch4.parentNode.insertBefore(light, cat_ch4.nextSibling);
	elem.children[0].style.cssText = "position:relative ; \ ";
	light.style.cssText="position:absolute;\
	bottom:45px; \ ";
	light2.style.cssText="position:absolute;\
	bottom:25px; \ ";
	var float_l = document.getElementsByTagName('td');
	var text_float = float_l[0];
	var text_float_stage1 = text_float.children[0];
	var dd_st = text_float_stage1.getElementsByTagName('dd');
	for (var i=0; i < dd_st.length; i++)
	 {
		dd_st[i].style.cssText="float:left !important; \
		width:160px;\ ";
	 }
	var dt_st = text_float_stage1.getElementsByTagName('dt');
	for (var i=0; i < dt_st.length; i++)
	 {
		dt_st[i].style.cssText="float:left !important; \
		width:120px;\ ";
	 }/**/
	var td_1 =  document.getElementsByTagName('td');
	td_1[0].style.cssText = "width:300px;\
	padding-top:21px;\
	float:left;\ ";
	td_1[1].style.cssText = "float:left; \ ";
	var float_l_stage1 = float_l[1];
	var float_l_stage2 = float_l_stage1.children[0];
	var float_l_stage3 = float_l_stage2.children[1];
	var float_l_stage4 = float_l_stage3.children[0];
	float_l_stage4.children[0].style.width = "570px";
	float_l_stage4.children[0].style.height = "125px";
	var btn = document.getElementById('btn_holder');
	var btn_prev = btn.previousElementSibling ;
	
	btn.style.cssText="float:left !important; \
	";
	btn_prev.style.cssText="float:left !important; \
	margin-left:250px;\ ";
	var width_line = document.getElementById('updates');
	width_line.children[0].style.cssText = "width:200px;\ ";
  </script>

И все бы хорошо, все работает так как надо КРОМЕ IE ниже 9... Я так понял нельзя использовать cssText , но на что заменить и как?
Ответить с цитированием
  #7 (permalink)  
Старый 18.08.2012, 23:32
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Нет, cssText работал всегда. Дело в previousElementSibling, ie<9 не знают такого.

Сразу напишу функцию, но на самом деле лучше вообще не использовать:
function prev( el ){
  while(el=el.previousSibling) if(el.nodeType === 1) break;
  return el
}
__________________
29375, 35

Последний раз редактировалось Aetae, 18.08.2012 в 23:38.
Ответить с цитированием
  #8 (permalink)  
Старый 18.08.2012, 23:40
Интересующийся
Отправить личное сообщение для Elve Посмотреть профиль Найти все сообщения от Elve
 
Регистрация: 11.06.2012
Сообщений: 25

after_main_stage1.style.cssText = "float:left;\ ";
мне отладчик ИЕ ругается на это и пишет

SCRIPT5007: Не удалось получить значение свойства "style": значением объекта является NULL или он не определен
Contact Us.htm, строка 229 символ 2

А что с этой функцией написанной вами делать? В смысле где ее вызывать и с какой целью
Ответить с цитированием
  #9 (permalink)  
Старый 18.08.2012, 23:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Очевидно, что проблема с after_main_stage1, в котором вообще нет style;
Сделайте
alert(after_main_stage1)
и посмотрите, что он вам напишет.

Сообщение от Elve Посмотреть сообщение
А что с этой функцией написанной вами делать? В смысле где ее вызывать и с какой целью
Вместо el.previousElementSibling использовать prev( el ).
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 19.08.2012, 01:04
Интересующийся
Отправить личное сообщение для Elve Посмотреть профиль Найти все сообщения от Elve
 
Регистрация: 11.06.2012
Сообщений: 25

Спасибо Aetae за помощь, но вопрос актуален... Получается, что ИЕ видит Коментарии в коде и принимает их как часть кода... Как бы это обойти, может кто подскажет?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
теги в выделенном фрагменте woojin Events/DOM/Window 48 15.08.2012 19:13
Выбор несуществующего элемента nematod Элементы интерфейса 1 12.03.2012 02:39
"Путь" до нужного элемента Pixelus jQuery 2 06.03.2012 21:34
Выбор нужного элемента из загружаемого файла на ajax+jquery/ 0931454574 AJAX и COMET 4 01.04.2011 14:37
Поиск нужного скрипта (выбор цвета) Djumpen Общие вопросы Javascript 1 02.04.2010 08:23