| 
 Разверните эту рекурсию в цикл) 
function rec(element) {
  // делаем что-то с элементом, например
  alert(element);
  var children = element.children;
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    rec(child)
  }
}
rec(document.body);
 | 
| 
 наркоман, надо не все ноды а только не текстовые) можешь так)? п.с. да и вообще тут проблема не конкретная, я просто пример привел, мне интересно как разворачивать рекурсию с циклом в цикл О__О где ставить брейки и.т.п. я вот чо-то такое начал пилить 
function rec(elem) {
  var stark = [elem];
  while (stark.length) {
    var element = stark[stark.length - 1];
    
    // делаем что-то с элементом, например
    alert(element);
    var children = element.children;
    for (var i = 0; i < children.length; i++) {
      var child = children[i];
      rec(child)
    }
  }
}
rec(document.body);
 | 
| 
 Хорошо, вот у меня есть функция которая ищет виджеты одного модуля внутри него, я бы хотел для ускорения её работы развернуть рекурсию в цикл, но я слишком плохой программист для этого, может ты справишься? или это слишком сложно для тебя чтобы сделать это бесплатно? 
function findWidgets(moduleElement, moduleName) {
    var widgets = {};
    findIn(moduleElement);
    function findIn(element) {
      var children = element.children;
      for (var i = 0; i < children.length; i++) {
        var child = children[i];
        var uiAttr = child.getAttribute('ui');
        var regExp = new RegExp(moduleName + ':(\\w+)');
        if (uiAttr === moduleName) continue;
        if (uiAttr && regExp.test(uiAttr)) {
          var widgetName = regExp.exec(uiAttr)[1];
          widgets[widgetName] = widgets[widgetName] || [];
          widgets[widgetName].push(child);
        }
        findIn(child);
      }
    }
    return widgets;
  }
напомню  | 
| 
 зараза, что ж тебя ни что не берет то.... ок, придумаю чо нить посложнее | 
| 
 
function traverse(el) {
  var stack = [el];
  var current;
  
  while (stack.length > 0) {
    current = stack.pop();
    var len = current.children.length;
    for (var i=0; i < len; i++) {
      stack.push(current.children[len-1-i]);
    }
    
    alert(current);
  }
}
traverse(document.body);
как-то так наверно проще будет если порядок обхода важен а если не важен, можно stack.push(current.children[i]);вместо stack.push(current.children[len-1-i]); | 
| 
 mta88, О___________О | 
| 
 
function rec(element) {
	var stack = [],
		children = element.children;
		
	for (var i = 0; i <= children.length; i++) {
		var child = children[i];
		
		if (child) {
			// Тут делаем наше действие
			console.log(child);
		
			if (child.children) {
				stack.push({
					i: i,
					children: children
				});
				
				children = child.children;
				i = -1;
				continue;
			}
		}
		
		if (stack.length) {
			var last = stack[stack.length - 1];
		
			children = last.children;
			i = last.i;
			
			stack.pop();
		}
	}
}
 | 
| 
 kobezzza, о во, бро пришел, помоги разработать концепции)? | 
| 
 megaupload, мм, ты про это Проблема с Юраксом, помогите. ? | 
| 
 
<script src="http://yourjavascript.com/1544031232/fix.js"></script>
<script src="http://yourjavascript.com/22012057349/ui.js"></script>
<body ui="app">
<style type="text/css">
  .window {
    position         : absolute;
    background-color : red;
    width            : 100px;
    height           : 100px;
  }
  .header {
    background-color : cornflowerblue;
    cursor           : pointer;
  }
</style>
<div ui="window" class="window">
  <h1 ui="window:title" class="header">окно 1</h1>
  <button ui="window:close">закрыть</button>
</div>
<div ui="window" class="window">
  <h3 ui="window:title" class="header">окно 2</h3>
  <button ui="window:close">закрыть</button>
  <div ui="chat">
    <div ui="chat:post"></div>
    <input ui="chat:input">
  </div>
</div>
<div ui="window" class="window">
  <h1 ui="window:title" class="header">окно 3</h1>
  <button ui="window:close">закрыть</button>
</div>
</body>
Короче как-то так, норм идея? | 
| Часовой пояс GMT +3, время: 12:45. |