2011-07-06 5 views
1

다음 코드를 사용하여 특정 div가 존재하는지 확인합니다. 그리고 그렇지 않은 경우 적절한 위치의 dom에 추가됩니다.jquery의 추가 및 앞자리에 문제가 발생했습니다.

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

내 문제는이 이미 1 회/추가 앞에 추가했다 사업부에 다시 ​​문 검사가, 그것이 내가 추가 한 사업부가 표시되지 않는 경우에 때. 따라서 이미 추가되거나 추가 된 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 나는 당신이 내게 준 것으로 만들었습니다.

에 대해 덧글을 작성한 행에서 increment 문을 밖으로 찾아보십시오. 기본적으로 "lastSlide"가 같은 값일 때 어떻게되는지 테스트 할 수 있습니다. ("lastSlide"가 실제로 다른 값인 경우와 비교).

실제 코드를 디버깅하고 실제로 예상되는 값을 lastSlide에 설정해보십시오.

0

이 작동합니다 :

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

이 추가 유지하기 때문에 당신의 조건이 항상 true 인 경우.

나는이 생각 ...

당신이 그것을 할 수 있는지 확인하기 위해이 같은 시도 할 수 테스트하지 않았습니다?

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

나는 이것을 시도했지만 작동하지 않았다. – y3di

1

내가 정확하게, 당신은 당신이 다시 같은 일을 할 경우 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>'); 
} 

내가 놓친 것이 없다면 문제는 다른 곳에 있어야합니다.

0

jQuery 필터를 사용하여 선택한 div가 이미 앞에 추가 된 경우이를 제거 할 수 있습니다. 이것은 특정 시나리오에 대한 작동합니다 :

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

"ID 'schDisplay'와 DIV를 선택한 후 ID를 '안부'로 시작으로 어떤 하위의 div가있는 경우 선택에서 제거합니다." 당신의 예에서

, 그래서 (if 문에 대한 필요) 등이 코드로 앞에 추가 문에 당신이하고자 체인 :

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

특별한주의 사항 :이 선택 JQuery와이다 : 나는이 있다고 생각 콘텐츠 필터 선택기입니다. jQuery 없이는 작동하지 않습니다. 분명히 jQuery를 사용하고 있지만 구현이 다른 독자는이를 염두에 두어야한다.

관련 문제