제거가 발생하기 전에 jQuery slideUp (). remove ()가 slideUp 애니메이션을 표시하지 않는 것 같습니다.


94

나는이 자바 스크립트 줄을 가지고 있고 내가보고있는 동작은 selectedLi"미끄러지는"없이 즉시 사라진다 는 것이다 . 이것은 내가 예상했던 동작이 아닙니다.

selectedLi슬라이드가 제거되기 전에 위로 올라가 도록하려면 어떻게해야 합니까?

selectedLi.slideUp("normal").remove();

답변:


197

slideUp에 콜백 인수에 remove 호출을 넣어 문제를 해결할 수 있을까요?

예 :

selectedLi.slideUp("normal", function() { $(this).remove(); } );

4
"느림"과 "빠름"이 유일한 속도입니다. 다른 속도는 밀리 초 단위이거나 기본값은 400
이어야

19

좀 더 명확해야합니다. "이것"(내가 작동하는 것에 동의 함)을 말하는 것보다 다음과 같이해야합니다.

$("#yourdiv").slideUp(1000, function() {
    $(this).remove();
});

2
죄송합니다 = 내 ID를 삭제하는 것을 잊었습니다. $ ( '# yourdiv'). slideUp (1000, function () {$ ( '# yourdiv'). remove ();});
Blake

12
$ ( "# yourdiv") 대신 $ (this)를 사용하면 jQuery가 노드를 찾을 필요가 없기 때문에 더 최적화됩니다.
MaximeBernard 2013

$("#yourdiv")대신 사용 하는 $(this)것은 완전히 중복되며 이것이이 코드가 OP의 문제를 해결하는 이유가 아닙니다. 이 코드는 complete콜백을 사용하기 때문에 문제를 해결합니다 .
Gavin

8

가장 간단한 방법은 다음 예제와 같이 다른 사람들이 말한 것과 같은 매개 변수로 slideUp 내부의 "remove ()"함수를 호출하는 것입니다.

$("#yourdiv").slideUp("normal", function() {
    $(this).remove();
});

slideUp이 끝나기 전에 remove ()가 실행되지 않도록 익명 function () 내에서 호출해야합니다. 또 다른 동일한 방법은 jQuery 함수 "promise ()"를 사용하는 것입니다. 나 같은 자명 한 코드를 좋아하는 사람들에게 더 좋습니다.)

$("#yourdiv").slideUp("normal").promise().done(function() {
    $(this).remove();
});

3

promise를 사용하면 여러 애니메이션이 완료 될 때까지 기다릴 수도 있습니다. 예 :

selectedLi.slideUp({duration: 5000, queue: false})
.fadeOut({duration: 3000, queue: false})
.promise().done(function() {
    selectedLi.remove()
})

-2
selectedLi.slideUp(200, this.remove);

1
나는 테스트했다-슬라이딩 후 요소를 제거하지 않습니다.
Konstantin Spirin

요소를 효율적으로 숨기지 만 실제로 DOM에서 제거하지는 않습니다.
andreszs 2015
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.