2013-10-28 274 views
0

循环遍历类的所有元素,我看到下面的代码只影响数组中的第一个元素,但控制台日志记录了它们中的每一个元素。

del = $('<img class="ui-hintAdmin-delete" src="/images/close.png"/>') 

$('.ui-hint').each(function(){ 
        console.log($(this)); 
        if ($(this + ':has(.ui-hintAdmin-delete)').length == 0) { 
         $(this).append(del); 
        } 
      }); 

这些元素都是非常简单的div只有文本里面的文本。他们都没有我在我的if语句中寻找的那个班级的元素,双重检查了这一点。试图改变陈述(使用has(),使用children()等)。猜猜我错过了这里很简单的东西,哈哈。

将apperciate输入。

+2

什么是德尔这里 –

+2

“这”是这里的对象,而不是字符串,你可以在你的选择使用串。 更换 $(这+ ':有(的.ui-hintAdmin-删除)') 与 $(本).find( 'UI-hintAdmin - 删除'。) – eggward

+0

@eggward,你的意思是'$(这一点).filter( ':有(的.ui-hintAdmin-删除)')'? – azz

回答

3

我想你需要的是(也如del应该是一个字符串,如果是DOM元素的引用,那么你需要追加之前,克隆它)

$('.ui-hint').not(':has(.ui-hintAdmin-delete)').append(function(){ 
    //you need to clone del else the same dom reference will be moved around instead of adding new elements to each hint 
    return del.clone() 
}); 
+0

是的,那工作,谢谢。 – nainy

+0

注意:您不需要该功能。你可以使用'.append(del.clone())',当你需要访问索引时,你只需要使用一个函数。 [看文档](http://api.jquery.com/append/#append-functionindex--html) – azz

+0

@DerFlatulator如果你使用'del.clone()',那么克隆只会发生一次....你需要为每个没有del元素的'hint'元素克隆它 –

1

你可以这样做:

$('.ui-hint:not(:has(.ui-hintAdmin-delete))').append(del); 

这里甚至没有使用每个循环。由于jQuery代码将在内部遍历ui-hint类元素的所有后代,并将del元素附加到没有任何.ui-hintAdmin-delete元素的后代。

1

虽然它可能会帮助看看你的HTML以及,请尝试更改您的条件,以

if (!$(this).hasClass('ui-hintAdmin-delete')) { 
    $(this).append(del); 
} 
相关问题