detach (), hide () 및 remove ()의 차이점-jQuery


답변:


151

hide()일치하는 요소의 CSS display속성을 none.

remove() DOM에서 일치하는 요소를 완전히 제거합니다.

detach()와 비슷 remove()하지만 일치하는 요소와 관련된 저장된 데이터 및 이벤트를 유지합니다.

분리 된 요소를 DOM에 다시 삽입하려면 jQuery다음에서 반환 된 집합을 삽입하면 됩니다 detach().

var span = $('span').detach();

...

span.appendTo('body');

7
.clone (참)과 결합하여, 당신은 싼 템플릿에 대한 분리 사용할 수있는 피합니다 JQuery와 라이브 이벤트 : jsfiddle.net/b9chris/PNd2t
크리스 Moschini

나는 아직도 그 차이를 보지 못한다. remove대신 사용 detach하면 예제가 계속 작동합니다.
comecme 2011

12
@comecme : 클릭 핸들러와 같은 이벤트를 스팬에 바인딩하고을 호출 한 remove()다음 다시 연결하면 바인딩이 사라지고 스팬을 클릭해도 아무 작업도 수행되지 않습니다. 호출 detach()하고 다시 연결하면 바인딩이 유지되고 클릭 핸들러가 계속 작동합니다.
lambshaanxy 2012-06-07

@Kumar의 대답은 DOM에서 제거되지 않았기 때문에 remove ()와 관련하여 조금 더 정확합니다. 바운드 이벤트가있는 복잡한 요소는 가비지 수집기에 의해 충분히 빨리 씹지 않으면 많은 브라우저 메모리를 소모하는 경향이 있기 때문에 이것은 영향을 미칩니다. 메모리를 더 빨리 확보하는 방법은 $ (element) .html ( ''). remove ();
oskarth

hide ()는 일치하는 요소의 CSS 표시 속성을 없음으로 설정합니다. 의미 : hide ()와 display : none의 차이점을 설명해 주시겠습니까?
Krish

50

연필로 쓴 메모가있는 테이블 위에 종이 한 장을 상상해보십시오.

  • hide -> 그 위에 옷을 던져
  • empty -> 지우개로 메모 제거
  • detach -> 당신의 손에 종이를 잡고 앞으로의 계획을 위해 그것을 보관하십시오
  • remove -> 종이를 잡고 쓰레기통에 버리십시오.

종이는 요소를 나타내고 메모는 요소의 내용 (하위 노드)을 나타냅니다.

약간 단순화되고 완전히 정확하지는 않지만 이해하기 쉽습니다.


14

hide() 일치하는 요소의 표시를 없음으로 설정합니다.

detach() 모든 텍스트 및 자식 노드를 포함하여 일치하는 요소를 제거합니다.

이 메서드는 요소와 관련된 모든 데이터를 저장하므로 요소의 데이터와 이벤트 핸들러를 복원하는 데 사용할 수 있습니다.

remove() 또한 모든 텍스트 및 하위 노드를 포함하여 일치하는 요소를 제거합니다.

그러나이 경우에는 요소의 데이터 만 복원 할 수 있으며 이벤트 핸들러는 복원 할 수 없습니다.


11

jQuery에는 DOM에서 요소를 제거하는 세 가지 방법이 있습니다. 이 세 가지 방법이 있습니다 .empty(), .remove()하고 .detach(). 이 모든 메소드는 DOM에서 요소를 제거하는 데 사용되지만 모두 다릅니다.

.숨는 장소()

일치하는 요소를 숨 깁니다. 매개 변수가없는 .hide () 메서드는 HTML 요소를 숨기는 가장 간단한 방법입니다.

$(".box").hide();

.빈()

.empty () 메서드는 선택한 요소에서 모든 자식 노드와 내용을 제거합니다. 이 메소드는 요소 자체 또는 해당 속성을 제거하지 않습니다.

노트

.empty () 메서드는 메모리 누수를 방지하기 위해 인수를 허용하지 않습니다. jQuery는 요소 자체를 제거하기 전에 하위 요소에서 데이터 및 이벤트 핸들러와 같은 다른 구성을 제거합니다.

<div class="content">
<div class="hai">Hai</div>
<div class="goodevening">good evening</div>
</div>
<script>
    $("div.hai").empty();
</script>

그러면 Hai 텍스트가 삭제 된 DOM 구조가 생성됩니다.

<div class="content">
<div class="hai"></div>
<div class="goodevening">good evening</div>
</div>

내부에 중첩 된 요소가 여러 개 있으면 해당 요소 <div class="hai">도 제거됩니다.

.없애다()

.remove () 메서드는 모든 텍스트 및 자식 노드를 포함하여 선택한 요소를 제거합니다. 이 메서드는 선택한 요소의 데이터와 이벤트도 제거합니다.

노트

요소 자체와 그 안의 모든 요소를 ​​제거하려면 .remove ()를 사용하십시오. 이 외에도 요소와 관련된 모든 바인딩 된 이벤트 및 jQuery 데이터가 제거됩니다.

다음 html을 고려하십시오.

<div class="content">
<div class="hai">Hai</div>
<div class="goodevening">good evening</div>
</div>
<script>
    $("div.hai").remove();
</script>

그러면 <div>요소가 삭제 된 DOM 구조가 생성 됩니다.

<div class="content">
<div class="goodevening">good evening</div>
</div

내부에 중첩 된 요소가 여러 개 있으면 해당 요소 <div class="hai">도 제거됩니다. 데이터 또는 이벤트 핸들러와 같은 다른 jQuery 구조도 지워집니다.

.떼다()

.detach () 메서드는 모든 텍스트 및 자식 노드를 포함하여 선택한 요소를 제거합니다. 그러나 데이터와 이벤트를 유지합니다. 이 메서드는 또한 제거 된 요소의 복사본을 유지하므로 나중에 다시 삽입 할 수 있습니다.

노트

.detach () 메서드는 제거 된 요소가 나중에 DOM에 다시 삽입 될 때 유용합니다.

<!doctype html>
<html>
<head>

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>Hai!</p>Good <p>Afternoo</p>
<button>Attach/detach paragraphs</button>
<script>
$( "p" ).click(function() {
$( this ).toggleClass( "off" );
});
var p;
$( "button" ).click(function() {
if ( p ) {
p.appendTo( "body" );
p = null;
} else {
p = $( "p" ).detach();
}
});
</script>
</body>
</html>

자세한 내용은 http://www.scriptcafe.in/2014/03/what-is-difference-between-jquery_15.html을 참조 하십시오.


0
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
</head>
<body>
    <script>
        $(document).ready(function(){
            var $span;
            $span = $("<span>");
            $span.text("Ngoc Xuan");
            function addEvent() {
                $span.on("click",function(){
                    alert("I'm Span");
                });
            }
            function addSpan() {

                $span.appendTo("body");
            }
           function addButton(name) {
               var $btn = $("<input>");
               $btn.attr({value:name,
                       type:'submit'});
               if(name=="remove"){
                   $btn.on("click",function(){
                       $("body").find("span").remove();
                   })
               }else if(name=="detach"){
                   $btn.on("click",function(){
                       $("body").find("span").detach();
                   })
               }else if(name=="Add") {
                   $btn.on("click",function(){
                       addSpan();
                   })
               }else if(name=="Event"){
                   $btn.on("click",function(){
                       addEvent();
                   })
               }else if (name == "Hide") {
                   $btn.on("click",function(){
                       if($span.text()!= '')
                           $span.hide();
                   })
               }else {
                   $btn.on("click",function(){
                       $span.show();
                   })
               }
               $btn.appendTo("body");
           }
            (function () {
                addButton("remove");
                addButton("detach");
                addButton("Add");
                addButton("Event");
                addButton("Hide");
                addButton("Show");
            })();
        });
    </script>
</body>
</html>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.