Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   После переназначения className происходит нечто странное (https://javascript.ru/forum/misc/53903-posle-perenaznacheniya-classname-proiskhodit-nechto-strannoe.html)

Птицын 23.02.2015 10:29

После переназначения className происходит нечто странное
 
Здрвствуйте, помогите, уже 3 часа сижу, жесть.

Имеется вот такой код:

function pagination(y, x)	{
	
	var nodeName = 'pd_pagination_' + y;
	
	var subNode = document.getElementById(nodeName);
	
	var nodes = subNode.getElementsByClassName('pd_pagination_p_cnt_focus');
	
		
	alert(nodes[0]); // здесь все норм выдет [object HTMLSpanElement]
	
	
	nodes[0].className = 'pd_pagination_p_cnt';
	
	
	alert(nodes[0]); // а здесь уже undefined
	
	
	
}


после nodes[0].className = 'pd_pagination_p_cnt';

после замены класса nodes[0] становится undefined и я его не могу дальше использовать


что-то я не понимаю что происходит


Вот это тоже не пашет:

<!DOCTYPE html>
<html>

<head>
</head>

<body>

<div id="my_div">
	<span id="my_span" class="one"></span></div>
<script type="text/javascript">

function pageInit() {
	
	var nodeName = 'my_div';
	
	var subNode = document.getElementById(nodeName);
	
	var nodes = subNode.getElementsByClassName('one');
	
	alert (nodes[0]); // все ОК
	
	nodes[0].className = 'two';
	
	
	alert (nodes[0]); // !!!!!Undefined!!!!
	
}

window.onload = pageInit;

</script>

</body>

</html>


не понимаю, почему теряется ссылка на ноду изза банального назначения стиля

рони 23.02.2015 10:56

Птицын,
Цитата:

Результаты поиска getElementsBy* — живые! При изменении документа — изменяется и результат запроса.
http://learn.javascript.ru/searching...-getelementsby

Птицын 23.02.2015 11:03

ага, я понял. а как тогда сохранить ссылку на объект для дальнейшего использования?

рони 23.02.2015 11:22

Птицын,
NodeList преобразовать в нормальный массив
строка 20
nodes = [].slice.call(nodes)

Птицын 24.02.2015 05:23

рони,

Разобрался, большое спасибо!

danik.js 24.02.2015 05:27

Птицын, не слушай его, он тебе хуету посоветовал. Вот нормальный вариант:
var nodes = subNode.querySelectorAll('.pd_pagination_p_cnt_focus');

Теперь твой код работает и в IE8, как бонус.


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