Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery的问题';s追加和前置_Javascript_Jquery_Dom_Append_Prepend - Fatal编程技术网

Javascript jquery的问题';s追加和前置

Javascript jquery的问题';s追加和前置,javascript,jquery,dom,append,prepend,Javascript,Jquery,Dom,Append,Prepend,我使用以下代码检查某个div是否存在。如果没有,它会在适当的位置将其添加到dom中 if (!($("#col"+lastSlide).length)) { $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>'); } if(!($(“#col”+lastmail.length)) { $('#schDisplay')。前缀(''); } 我的问题是,当这个if语句再次检查一个已经

我使用以下代码检查某个div是否存在。如果没有,它会在适当的位置将其添加到dom中

if (!($("#col"+lastSlide).length))
{
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>');
}
if(!($(“#col”+lastmail.length))
{
$('#schDisplay')。前缀('');
}
我的问题是,当这个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);
                }
            }
//填充已添加的列
函数fillElement(colnum)
{
var URL='schedule.php';
$(“#col”+colnum).text(“加载…”).show();
$.post(URL,{fecolnum:colnum},
功能(数据)
{
$(“#col”+colnum).html(data.show();
});
}
//…无关代码。。。
//为创建事件侦听器。单击箭头
$(“.arrows”)
.bind('单击',函数()){
numberOfSlides++;
//确定新位置
if($(this.attr('id')=='arrow\u right')
{
lastSlide++;
currentPosition++;
如果(!($(“#col”+最后一张幻灯片).length))
{
$('#schDisplay')。附加('');
填充元素(最后一张幻灯片);
}
}
其他的
{
最后一张幻灯片--;
当前位置--;
如果(!($(“#col”+最后一张幻灯片-2.长度))
{
$('#schDisplay')。前缀('');
fillElement(lastSlide-2);
}
}
这将起作用:

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

它不断增加,因为您的if条件始终为true

我还没有测试过这个

你能试试这样的东西看看是否有用吗

var len = 0;
len = $("#col"+lastSlide).length;
if (len < 1)
{
    $('#schDisplay').prepend('<div id="col' + (lastSlide) + '"></div>');
}
var len=0;
len=$(“#col”+最后一张幻灯片)。长度;
if(len<1)
{
$('#schDisplay')。前缀('');
}

如果我正确理解了你的问题,你是说如果你再做同样的事情,它会不断添加
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>');
}
lastlide=1;
如果(!($(“#col”+最后一张幻灯片).length))
{
$('#schDisplay')。前缀('');
}
如果(!($(“#col”+最后一张幻灯片).length))
{
$('#schDisplay')。前缀('');
}

如果我没有漏掉什么,你的问题一定在别处。

我没有太多的背景可供参考,但请检查一下我根据你给我的东西制作的这个

请注意我的注释行,您可以对increment语句进行注释。


您可以尝试调试实际代码,并确保lastSlide具有您实际期望的值。

您可以使用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('');

特别注意:我认为:has选择器是一个jQuery内容过滤器选择器,这意味着没有jQuery它将无法工作。您显然在使用jQuery,但具有不同实现的读者应该记住这一点。

您需要显示更多的上下文。我无法从您的问题中看出“#col”+lastsile和“#schDisplay”之间的关系ed.根据您向我展示的内容,完全有可能在您准备#schDisplay时,“#col”+lastSlide没有更改。信息不足。请发布相关代码。我更新了问题并添加了更多代码。我感觉可能需要使用。live()在某个地方,但我不确定正确的语法是什么。你说它一直在添加div,但你从来没有检查过同一个div id两次。每次单击
。箭头
链接时,你都会增加
lastSlide
,因此每次都会添加一个具有新id的div。当按下第一个按钮时,它会增加lastSlide并在按下第二个滑块时递减lastSlide。当我递增然后递减时会出现问题,反之亦然。当出现这种情况时,会添加ID完全相同的div。(我通过firebug看到它)
$('#schDisplay').filter(':not(:has(div[id^=col]))').prepend('<div id="col' + (lastSlide) + '"></div>');