Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Выбор нужного элемента дом дерева (https://javascript.ru/forum/events/30865-vybor-nuzhnogo-ehlementa-dom-dereva.html)

Aetae 19.08.2012 15:54

wrapper_.children[3] //undefined, а не null
alert(wrapper_.children[3] === null);//возвращает false

alert([ 
undefined == null,
undefined ===  null
])

cyber 19.08.2012 16:26

Цитата:

Сообщение от Aetae (Сообщение 198776)
wrapper_.children[3] //undefined, а не null
alert(wrapper_.children[3] === null);//возвращает false

alert([ 
undefined == null,
undefined ===  null
])

хм.. понял , был не прав.
а можно ссылочку прочитать про то почему они равны, потому что помню что undefined == null, а почему не могу вспомнить

Aetae 19.08.2012 16:32

Потому же почему и
alert(0==false)
и
alert('' == 0)
. Приведение типов.)

cyber 19.08.2012 16:36

Цитата:

Сообщение от Aetae (Сообщение 198787)
Потому же почему и
alert(0==false)
и
alert('' == 0)
. Приведение типов.)

ну так это понятно, false при переводе в число == 0 и со строкой тоже.
Ну если меня память не подводит то в учебнике было написано что они сравниваются "как есть"

Elve 19.08.2012 21:17

Спасибо за помощь
 
Сбасибо Aetae и cyber за то, что помогли новичку разобраться в работе с DOM деревом. Итак теперь код, который работает для тех, кто возможно столкнется с подобной задачей
Код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Документ без названия</title>
</head>
 
<body>
<div id="content-wrap">
<!--text1-->
<div>1</div>
<div>2</div>
<!--text 2 -->
<div>3</div>
 
</div>
<script>
      function prev( el ){
                  while(el=el.previousSibling) if(el.nodeType === 1) break;
                  return el
        }
        var wrapper_ = document.getElementById('content-wrap');
        var elem =  wrapper_.children[2];
        var divs = wrapper_.getElementsByTagName('div');
 
       
        alert('до обработки ='+wrapper_.childNodes.length+" после="+remove_TextNode(wrapper_.childNodes).length);
        console.log(wrapper_.childNodes);
        wrapper_n = remove_TextNode(wrapper_.childNodes);

   
    function remove_TextNode (array) {
   
      var leng = array.length;
      var elemArray, resultArray = [];
     
      for (var i = 0; i < leng;i++) {
     
      elemArray = array[i];
   
        if (elemArray.nodeType != 1) continue;
       
       
        resultArray.push(elemArray);
      }
   
    return resultArray;
    }
        after_main =  wrapper_n[2]
        wrapper_.insertBefore(elem, wrapper_n[1] || null);
</script>
</body>
</html>

И П.С. К этому счастью: function prev( el ) - функция замена previousSibiling для работы кроссбраузерно
function remove_TextNode (array) - для работы с массивом вложенных элементов в том случае, если в коде есть комментарии ( Коменты ИЕ видит как отдельный элемент и поэтому работа под ИЕ и под другими браузерами будет сильно отличаться.)
children в ие ниже 9 версии вроде работает( лично у меня работает в 7 и 8 версии)

cyber 19.08.2012 21:42

хочу уточнить что функции remove_TextNode отсеивает все кроме обьектов (тэгов), т.е удаляет комментарии , текстовые узлы ...

Dargonaks 20.03.2015 16:58

Всем доброго время, подскажите пожалуйста как заставить работать такую конструкцию
<script type="text/javascript">
window.onload = afterLoad;
function afterLoad() {
	var maina = document.getElementsByClassName('top_menu_test'); // находим узел
	var newAttr1 = document.createAttribute('rel'); // создаем атрибут
	newAttr1.value = 'nofollow';  // устанавливаем значение
	maina.setAttributeNode(newAttr1);  // привязываем атрибут
};

</script>
<a class="top_menu_test" href="http://mail.ru">http://mail.ru</a>

Aetae 20.03.2015 17:43

var maina = document.getElement*!*s*/!*ByClassName('top_menu_test')*!*[0]*/!*;
Elements - множественное число, результат NodeList(массивоподобный объект) и если элемент с таким классом один - значит он там нулевой.

А вообще лучше не использовать getElementsByClassName (ибо не работает в ie8), в вашем случае отлично подойдёт:
var maina = document.querySelector('.top_menu_test');

Dargonaks 21.03.2015 22:45

большое спасибо добрый человек

Dargonaks 23.03.2015 09:45

а на будующее не могли бы подсказать пример для такого случая:
<script type="text/javascript">
window.onload = afterLoad;
function afterLoad() {
	var maina = document.querySelectorAll('.top_menu_test'); // находим узел
	var newAttr1 = document.createAttribute('rel'); // создаем атрибут
	newAttr1.value = 'nofollow';  // устанавливаем значение
	maina.setAttributeNode(newAttr1);  // привязываем атрибут
};

</script>


<a class="top_menu_test" href="http://mail.ru">http://mail.ru</a><br>
<a class="top_menu_test" href="http://yandex.ru">http://yandex.ru</a><br>
<a class="top_menu_test" href="http://google.ru">http://google.ru</a><br>


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