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输入。

4

3 回答 3

4

我认为你需要的是(如果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()
});
于 2013-10-28T06:46:04.843 回答
1

你可以这样做:

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

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

于 2013-10-28T06:47:16.480 回答
1

虽然它可能也有助于查看您的 HTML,但请尝试将您的条件更改为

if (!$(this).hasClass('ui-hintAdmin-delete')) {
    $(this).append(del);
}
于 2013-10-28T06:47:49.780 回答