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如果您再次做同样的事情,它会不断添加。但是,我无法重现这一点。以下代码显示了一个 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>');
}

如果我没有错过什么,那么您的问题一定出在其他地方。

于 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 回答