循环时JavaScript改变for循环条件(No JQuery)

时间:2015-10-28 16:17:07

标签: javascript for-loop conditional-statements

我的代码看起来有点像这样。

我想要实现的是如果被检查的div具有子div,则更改for循环编码。

var condition = divs.querySelectorAll('div');
for(i = 0; i < condition.length; i++){
    if(condition[i].querySelectorAll('div').length > 0){
         condition = condition[i].querySelectorAll('div');
         i = 0;
    }else{
         // Last div reached.
         break;
    }
}

有没有人知道如何实现这种效果。 我是否必须使用其他类型的循环?

编辑:

由于我觉得错误的是什么代码错了,我现在发布一堆杂乱的代码:

var posX = e.clientX;
var posY = e.clientY;
function mouseDown(e){
    var getChildDivs = this.querySelectorAll('div');

    if(getChildDivs.length > 0){
        var offsetDivLeft = 0;
        var offsetDivTop = 0;
        for(i = 0; i < getChildDivs.length; i++){
            if(posX >= getChildDivs[i].offsetLeft && posX <= getChildDivs[i].offsetLeft + Math.floor(getChildDivs[i].style.width.slice(0, -2)) &&
                posY >= getChildDivs[i].offsetTop && posY <= getChildDivs[i].offsetTop + Math.floor(getChildDivs[i].style.height.slice(0, -2))){
                if(getChildDivs[i].querySelectorAll('div').length > 0){
                    offsetDivLeft = offsetDivLeft + getChildDivs[i].offsetLeft;
                    offsetDivTop = offsetDivTop + getChildDivs[i].offsetTop;
                    getChildDivs = getChildDivs[i].querySelectorAll('div');
                    curDiv = getChildDivs[i];
                    i = 0;
                }else{
                    curDiv = getChildDivs[i];
                    break;
                }
            }
        }
}
}

2 个答案:

答案 0 :(得分:0)

我创造了一个小提琴,它循环遍历每个儿童元素和孩子的孩子:

http://jsfiddle.net/czzeaz3x/

var condition = divs.querySelectorAll('div');
for(i = 0; i < condition.length; i++){
if(condition[i].children.length > 0){
     condition = condition[i].querySelectorAll('div');
    alert(condition);
     i = 0;
}else{
     // Last div reached.
     break;
}
}

我希望它有所帮助;)

答案 1 :(得分:0)

正确的解决方案是

function mouseDown(e){
  curdiv = e.target;
}

事件的target属性为您提供了被点击的实际div - 通常是最前面的div,通常也是嵌套最深的div。来自MDN

  

对调度事件的对象的引用。