循环遍历该类的所有元素,我看到下面的代码只影响数组中的第一个元素,但控制台日志记录了每个元素。
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()
等)。猜猜我在这里错过了一些非常简单的东西,哈哈。
将提供输入。
答案 0 :(得分: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()
});
答案 1 :(得分:1)
你可以这样做:
$('.ui-hint:not(:has(.ui-hintAdmin-delete))').append(del);
这里甚至没有使用每个循环。由于jquery代码将在内部循环遍历ui-hint
类元素的所有后代,并将del
元素仅附加到没有任何.ui-hintAdmin-delete
元素的后代。
答案 2 :(得分:1)
虽然查看HTML也可能有所帮助,但请尝试将条件更改为
if (!$(this).hasClass('ui-hintAdmin-delete')) {
$(this).append(del);
}