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ステートメントで探しているクラスの要素を持っていません。それを再確認しました。ステートメントを変更しようとしました ( using has()、 usingchildren()など)。ここで非常に単純なものが欠けていると思います、ハハ。

入力を感謝します。

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 に答える