2011-07-06 88 views
1

麻煩我使用下面的代碼來檢查是否存在某個div。如果它沒有把它添加到合適的地方。與jquery的追加和prepend

if (!($("#col"+lastSlide).length)) 
{ 
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>'); 
} 

我的問題是,當這個如果再語句檢查了已經一度被追加/前置一個div,它不會看到我添加的格。所以它會繼續添加已經預先/附加的div。

有什麼辦法可以解決這個問題嗎?

更多的代碼:

//fillin added column 
function fillElement(colnum) 
{ 
    var URL = 'schedule.php'; 
    $("#col"+colnum).text("Loading...").show(); 
    $.post(URL,{fecolnum: colnum}, 
    function (data) 
    { 
     $("#col"+colnum).html(data).show(); 
    }); 
} 
//...irrelevant code... 

    // Create event listeners for .arrows clicks 
     $('.arrows') 
     .bind('click', function(){ 
      numberOfSlides++; 
      // Determine new position 
      if ($(this).attr('id')=='arrow_right') 
      { 
       lastSlide++; 
       currentPosition++; 
       if (!($("#col"+lastSlide).length)) 
       { 
        $('#schDisplay').append('<div id="col' + lastSlide + '" class="schColumn" style="float: left; width: ' +slideWidth+ 'px"></div>'); 
        fillElement(lastSlide); 
       } 
      } 
      else 
      { 
       lastSlide--; 
       currentPosition--; 
       if (!($("#col"+lastSlide-2).length)) 
       { 
        $('#schDisplay').prepend('<div id="col' + (lastSlide-2) + '" class="schColumn" style="float: left; width: ' +slideWidth+ 'px"></div>'); 
        fillElement(lastSlide-2); 
       } 
      } 
+0

您需要顯示更多上下文。我無法從你的問題中知道'#col'+ lastSlide和'#schDisplay'是如何相關的。從你告訴我的內容來看,當你添加到#schDisplay時,'#col'+ lastSlide完全可能不會改變。 – Flimzy

+0

沒有足夠的信息。請發佈相關代碼。 – user113716

+0

我更新了問題並添加了更多代碼。我有這樣的感覺,我可能需要在某處使用.live(),但我不確定正確的語法將在何處或什麼。 – y3di

回答

1

我沒有太多的上下文,但結帳這jsfiddle我從你給我做的。

請注意,我已發表評論意見,您可以發表評論增量聲明。基本上,這是如何測試「lastSlide」是相同的值時會發生什麼。 (與「lastSlide」確實是不同的值)。

你可能只是試着調試你的實際代碼,並確保lastSlide具有你實際期望的值。

0

這將工作:

if (!($("#col"+lastSlide).length)) { 
    var newdiv = $('<div id="col'+lastSlide+'"/>'); 
    $('#schDisplay').prepend(newdiv); 
} 
0

它不斷增加,因爲你如果條件始終爲真。

我沒有測試過這雖然...

你能嘗試這樣的事情,看看是否有幫助?

var len = 0; 
len = $("#col"+lastSlide).length; 
if (len < 1) 
{ 
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>'); 
} 
+0

我試過了,它沒有工作 – y3di

1

如果我理解你的問題正確,你說,它不斷添加div如果再次做同樣的事情。但是,我不能重現這一點。以下代碼顯示一個div。據你介紹,它會顯示兩個div。

lastSlide = 1; 
if (!($("#col"+lastSlide).length)) 
{ 
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>'); 
} 
if (!($("#col"+lastSlide).length)) 
{ 
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>'); 
} 

如果我沒有錯過任何東西,你的問題必須在別處。

0

您可以使用jQuery過濾器刪除選定的div,如果它已被預置爲。這應該爲您的特定情況下工作:

$('#schDisplay').filter(':not(:has(div[id^=col]))') 

這是說「選擇ID爲‘schDisplay’股利,然後如果有任何後代的div IDS與‘山口’開始從選擇中移除它。」

在你的榜樣,你會在你的前面加上聲明鏈這個代碼像這樣(無需if語句):

$('#schDisplay').filter(':not(:has(div[id^=col]))').prepend('<div id="col' + (lastSlide) + '"></div>'); 

特別說明:我相信:有選擇是一個jQuery內容過濾器選擇器,這意味着它不會沒有jQuery的工作。您明確使用jQuery,但具有不同實現的讀者應該牢記這一點。