我使用以下代码检查某个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);
}
}
答案 0 :(得分: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>');
}
如果我没有错过任何东西,你的问题必须在别处。
答案 1 :(得分:1)
我没有太多的背景信息,但请查看我根据你给我的信息jsfiddle。
请注意我发表评论的行,您可以对 out 增量声明发表评论。基本上,这就是你可以测试当“lastSlide”是相同值时会发生什么的方法。 (相比之下,如果“lastSlide”确实是一个不同的值)。
您可能只是尝试调试实际代码并确保lastSlide具有您实际期望的值。
答案 2 :(得分:0)
这将有效:
if (!($("#col"+lastSlide).length)) {
var newdiv = $('<div id="col'+lastSlide+'"/>');
$('#schDisplay').prepend(newdiv);
}
答案 3 :(得分:0)
它一直在添加,因为你的if条件总是正确的。
我没有测试过这个......
你能尝试这样的事情来看看它是否有帮助?
var len = 0;
len = $("#col"+lastSlide).length;
if (len < 1)
{
$('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>');
}
答案 4 :(得分:0)
如果已经预先添加了div,则可以使用jQuery过滤器删除所选的div。这适用于您的特定情况:
$('#schDisplay').filter(':not(:has(div[id^=col]))')
这表示“选择id为'schDisplay'的div,然后将其从选择中删除,如果它有任何后代div,其中id以'col'开头”。
在您的示例中,您将prepend语句链接到此代码,如此(不需要if语句):
$('#schDisplay').filter(':not(:has(div[id^=col]))').prepend('<div id="col' + (lastSlide) + '"></div>');
特别说明:我相信:has选择器是一个jQuery内容过滤器选择器,这意味着没有jQuery它将无法工作。您显然正在使用jQuery,但具有不同实现的读者应牢记这一点。