为什么jquery each()不迭代?

时间:2013-08-20 22:43:38

标签: javascript jquery

我想在每个使用Jquery UI构建的选项卡上放置滚动指示。实际上,下面的代码适用于第一个选项卡并停在那里。 我测试了它直到所有ul的if语句都很好,但只有第一个ul通过if语句,即使第二个ul至少也给出了一个真如果

我错过了什么?

另外我明白每个()都会在假的情况下停止。我怎么能绕过那个?

var i = 0;
$(".comp_pr ul").each(function () {
    var element0 = $(this).attr('id');
    var element1 = "#" + element0;
    var element = document.querySelector(element1);
    if ((element.offsetHeight < element.scrollHeight) || (element.offsetWidth < element.scrollWidth)) {
        $(element1 + ' ' + "li:nth-child(4) span:nth-child(3)").html('scroll <img id=""       src="img/forward.png" title=""/>');
        $(element1 + ' ' + "li:nth-child(4) span:nth-child(3)").attr('class', 'zscroll');
        $(element1 + ' ' + "li:nth-child(4) span:nth-child(3)").attr('id', 'zs' + i);
    }
    i++;
});

HTML的快速摘要:

<div class="comp_pr">
<ul id="measure0">
<li></li>
......
</ul>
</div>

<div class="comp_pr>
<ul id="measure1"
<li></li>
......
</ul></div> 
....

4 个答案:

答案 0 :(得分:2)

隐藏其他标签,对吗?所以他们的身高和宽度都是0。

答案 1 :(得分:2)

你的代码效率非常低,这里是相同的代码,改进了:

$("#comp_pr ul").each(function (i) {
    if ((this.offsetHeight < this.scrollHeight) || (this.offsetWidth < this.scrollWidth)) {
        $(this).find('li:nth-child(4) span:nth-child(3)').html('scroll <img src="img/forward.png" title=""/>').addClass('zscroll').attr('id', 'zs' + i);
    }
});

此外,我不确定我们是否可以在没有HTML标记的情况下诊断您的实际问题进行测试。

答案 2 :(得分:0)

芭芭拉莱尔德向我展示了我提出以下内容的方式,这对我来说很有用,可供任何人参考。 请注意,它需要在选项卡上激活(激活),而不是在激活之前,因为只有在激活后才能获得这些措施。

$(function() {
$( "#tabs" ).tabs({
activate: function(event,ui) {
var tabid = ui.newPanel.attr('id');
var i = tabid.charAt(tabid.length-1)-1;
ulid = "#measure" + i;
var element = document.querySelector(ulid);
if( (element.offsetHeight < element.scrollHeight) || (element.offsetWidth < element.scrollWidth)){
    $(ulid).find('li:nth-child(4) span:nth-child(3)').html('scroll <img src="img/forward.png" title=""/>').addClass('zscroll').attr('id', 'zs' + i);
}
}
});
});

答案 3 :(得分:-1)

ID应该是唯一的,可能会导致您出现问题,使用类名,也可能值得尝试++i;