我的代码中有一些div,我想循环检查实际的最后一个。
为什么这不起作用?
<div class="tarefa">1</div>
<div class="tarefa">2</div>
<div class="tarefa">3</div>
<script>
$(function() {
i = 0 ;
$('.tarefa').each(function(index) {
i++;
if($(this).css("left") == $(this).prev('.tarefa').css("left")){
alert(i);
}
});
});
</script>
此$(this).prev('.tarefa').css("left")
始终未定义。
答案 0 :(得分:2)
如果你已经包含了HTML,那么我们可以直接回答。我发现您的代码存在两个潜在问题。
1)当比较.each()中的第一项时,可能没有.prev(),所以你要求空的jQuery对象.css("left")
。这将是最好的未定义,可能会失败,但通常不是一个好主意。
2)如果你的所有.tarefa
个对象都不是没有干预对象的直接兄弟姐妹,那么$(this).prev('.tarefa')
就没有达到预期效果。
如果你检查jQuery doc for .prev()
,只有当它与那个班级相匹配时,它才能获得前一个兄弟姐妹。它不会获取jQuery对象中的上一个项目,因此如果您的.tarefa对象不是彼此的直接兄弟,则代码将无法按预期工作。
您可以针对此版本的两个问题修复代码:
$(function() {
i = 0 ;
var items = $('.tarefa');
items.each(function(index) {
i++;
if(index > 0 && $(this).css("left") == items.eq(index-1).css("left")){
alert(i);
}
});
});
稍后编辑:
使用您在评论中添加的HTML,您的原始代码将真正起作用。第一次遍历.each()
将获得.prev()CSS值的未定义值,但它将适当地使您的比较失败并且您的原始代码将实际工作。我不推荐它,因为这是一种更安全的方式,也可能表现得更好。
答案 1 :(得分:0)
第一次循环运行时,当this
引用DOM中具有类tarefa
的第一个元素时,之前没有类tarefa
的元素 - 因此{{1不会选择任何东西。
答案 2 :(得分:0)
您应该能够一起使用它们。这个例子有效:
<script type="text/javascript">
$(function(){
$(".test").each(function(index){
if (index){
alert($(this).prev().text());
}
});
});
</script>
<div class="test" style="background-color:yellow;">Test 1</div>
<div class="test" style="background-color:blue;">Test 2</div>
<div class="test" style="background-color:green;">Test 3</div>
这是jsFiddle