1

次のコードを使用して、特定のdivが存在するかどうかを確認します。そうでない場合は、適切な場所のdomに追加されます。

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

私の問題は、このifステートメントがすでに追加/追加された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);
                }
            }
4

5 に答える 5

1

私があなたの質問を正しく理解しているdivなら、あなたはあなたが同じことをもう一度やればそれが追加し続けると言っているのです。しかし、これを再現することはできません。次のコードは、1つのdivを示しています。あなたによると、それは2つの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>');
}

私が何かを見逃していなければ、あなたの問題は他の場所にあるに違いありません。

于 2011-07-06T00:12:50.210 に答える
1

私にはあまり文脈がありませんが、あなたが私にくれたものから私が作ったこのjsfiddleをチェックしてください。

インクリメントステートメントをコメントアウトできるコメントを作成した行に注意してください。基本的に、これは「lastSlide」が同じ値の場合に何が起こるかをテストする方法です。(「lastSlide」が実際に異なる値である場合とは対照的です)。

実際のコードをデバッグして、lastSlideが実際に期待する値を持っていることを確認してみてください。

于 2011-07-06T00:20:13.343 に答える
0

これは機能します:

if (!($("#col"+lastSlide).length)) {
  var newdiv = $('<div id="col'+lastSlide+'"/>');
  $('#schDisplay').prepend(newdiv);
}
于 2011-07-06T00:07:14.687 に答える
0

if条件が常に真であるため、追加を続けます。

私はこれをテストしていません...

このようなことを試して、それが役立つかどうかを確認できますか?

var len = 0;
len = $("#col"+lastSlide).length;
if (len < 1)
{
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>');
}
于 2011-07-06T00:07:52.887 に答える
0

すでに先頭に追加されている場合は、jQueryフィルターを使用して、選択したdivを削除できます。これは、特定のシナリオで機能するはずです。

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

これは、「IDが「schDisplay」のdivを選択し、IDが「col」で始まる子孫のdivがある場合は、選択から削除する」ことを示しています。

あなたの例では、次のようにprependステートメントをこのコードにチェーンします(ifステートメントは必要ありません)。

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

特記事項::hasセレクターはjQueryコンテンツフィルターセレクターであると思います。つまり、jQueryがないと機能しません。明らかにjQueryを使用していますが、実装が異なる読者はこれを覚えておく必要があります。

于 2011-07-06T00:28:03.690 に答える