2013-10-28 62 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); 
}