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)

cyber 19.08.2012 02:08

Цитата:

Сообщение от Aetae (Сообщение 198651)
И да, решение от cyber, не будет работать если элементов 3, надо так:
var wrapper_ = document.getElementById('wrapper');
var elem =  wrapper_.children[1];
wrapper_.insertBefore(elem, wrapper_.children[3] || null) //ксли вторым параметром null - работает как appeendChild, а если undefined - кидает ошибку

нет, вы ошибаетесь

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

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

var elem =  wrapper_.children[1];
    alert(wrapper_.children[3] == null);//wrapper_.children[3] == undefined, a undefined == null
    
 wrapper_.insertBefore(elem, wrapper_.children[3])  
    


    </script>

  </body>
</html>

cyber 19.08.2012 02:46

что бы убрать все лишние элементы (комментарии, пробелы и ...) написал функцию remove_TextNode (кроссбраузерно)
<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>
<div id='wrapper'> 
    <div>1 </div>
    <div> 2</div>
  <!--text-->
    <div>3 </div>
    
  </div>  

  <script>

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

 var divs = wrapper_.getElementsByTagName('div');
 


 console.log(wrapper_.childNodes);
 console.log( 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;
    }
    


    </script>

  </body>
</html>

lord2kim 19.08.2012 08:01

Цитата:

Сообщение от cyber (Сообщение 198682)
нет, вы ошибаетесь

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

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

var elem =  wrapper_.children[1];
    alert(wrapper_.children[3] == null);//wrapper_.children[3] == undefined, a undefined == null
    
 wrapper_.insertBefore(elem, wrapper_.children[3])  
    


    </script>

  </body>
</html>

в IE < 9 как минимум ваш вариант не буит робить...нужно делать как написал Aetae

Elve 19.08.2012 11:03

<!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></div>
<div></div>
<!--text 2 -->
<div></div>

</div>
<script>
var wrapper_ = document.getElementById('content-wrap');
	/*var elem =  wrapper_.children[4];*/
	var divs = wrapper_.getElementsByTagName('div');

	
	console.log(wrapper_.childNodes);
 	console.log(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;
    }
</script>
</body>
</html>

Вот это запускаю в ИЕ и ноль на массу... :(

cyber 19.08.2012 14:46

я запускал это в ие 8 и все работало

Deff 19.08.2012 15:05

cyber,
Не робит ие6-8

cyber 19.08.2012 15:13

<!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></div>
<div></div>
<!--text 2 -->
<div></div>
 
</div>
<script> 
var wrapper_ = document.getElementById('content-wrap');
	/*var elem =  wrapper_.children[4];*/
	var divs = wrapper_.getElementsByTagName('div');
 
	
	alert('до обработки ='+wrapper_.childNodes.length+" после="+remove_TextNode(wrapper_.childNodes).length);
 	
    
    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;
    }
</script>
</body>
</html>


cyber 19.08.2012 15:16

Цитата:

Сообщение от lord2kim (Сообщение 198693)
в IE < 9 как минимум ваш вариант не буит робить...нужно делать как написал Aetae

хм..
вы правы, не работает, но пародкс в том что

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

lord2kim 19.08.2012 15:24

cyber, не важно, что он возвращает, важно что IE это не воспринимает)))

cyber 19.08.2012 15:27

Цитата:

Сообщение от lord2kim (Сообщение 198770)
cyber, не важно, что он возвращает, важно что IE это не воспринимает)))

кто вообще ие назвал браузером:-E


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