2011-07-06 3 views
1

次のコードを使用して、特定のdivが存在するかどうかを確認します。それがなければ、適切な場所のdomに追加します。jqueryの追加とプリペンドに関する問題

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

私の問題はとき、これは既に一度先頭に追加/追加された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を追加し続けることを言っています。しかし、私はこれを再現することはできません。次のコードは1つのdivを示しています。あなたによると、2つの部門が表示されます。

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]))') 

をこれが「『schDisplay』 idを持つdiv要素を選択し、それがIDを持つすべての子孫のdivは 『COL』で開始している場合は選択からそれを削除」と言います。あなたの例では

、そう(if文は必要ありません)のように、このコードをあなたの先頭に追加ステートメントにあなたが希望チェーン:

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

特別な注意は:持っているセレクタjQueryのです:私はそれを信じていますコンテンツフィルタセレクタは、jQueryなしでは動作しません。あなたは明らかにjQueryを使用していますが、異なる実装を持つ読者はこれを覚えておく必要があります。

関連する問題