2011-08-25 2 views
3

간단히 말해서 ...

나는 요소가 clone입니다. 그것의 div에 저장된 다른 태그들. 그것에도 .x이 있습니다.

나는 그것을 제거한 다음 수정 된 요소를 다른 요소에 붙여야합니다.

아쉽게도 작동하지 않습니다. 제거에 실패했거나 무엇인가 있지만 .x이 아직 남아 있습니다.

clone = subtitle.clone(); // Works! 
no_label = clone.remove('.x'); // This fails. 
more_subtitles.append(no_label); // Its appends no_label, but it still contains .x element. 
+0

가변 자막에는 무엇이 있습니까? –

+0

'자막 '은 또 다른 요소입니다. – daGrevis

답변

2

이는 remove()이 일치하는 요소를 DOM에서 제거하기 때문입니다. 선택기를 전달하더라도 이러한 요소를 필터링하는 데만 사용됩니다. 코드에서 clonex 클래스를 노출시키지 않는 단일 요소 (복제 된 자막)와 일치합니다.

당신은 .x 요소에 맞게 find()를 사용할 수 있습니다

more_subtitles.append(subtitle.clone().find(".x").remove().end()); 
1

remove()는 요소를 삭제하기위한 것입니다. 클래스를 제거하려면 removeClass (className)을 사용해야합니다.

+1

아니, 아니, 아니. 나는 요소'clone'에있는 선택자'.x'로 ** element **를 제거하고 싶습니다. – daGrevis

-1

클론에서 수업을 삭제 하시겠습니까? 그렇다면 removeClass를 다음과 같이 사용하십시오.

clone.removeClass('x'); 
1

클론 내부에서 .x 요소를 삭제 하시겠습니까?

clone.find('.x').remove() 
+0

+1. http://api.jquery.com/remove/ selector 인자는'clone'의 자식 요소를 선택하지 않고'clone' 변수를 필터링하는데 사용됩니다. 그러나 이번에는'clone'은 하나의 요소 집합이 될 수 있고 요소는'x' 클래스를 갖지 않으므로 실패합니다. – qingbo

1

당신은 이런 식으로 작업을 수행 할 수 있습니다 대신 .remove().detach()을 사용할 수 있습니다

clone = subtitle.clone(); 
no_label = clone.find('.x').detach(); 
more_subtitles.append(clone); 

참고. 이것은 요소에 첨부 된 모든 메타 데이터를 유지합니다.

+0

그 이유는 모르겠지만, ** .x와 일치하는 ** 모든 ** 다른 요소는 제거됩니다. 이상한! – daGrevis

+0

'.detach'는 detached 요소를 반환하고 결과는'no_label'에 할당되기 때문입니다. 세 번째 명령문은'clone' 대신'no_label'을 추가했습니다. 'more_subtitles.append (clone);로 변경하면 수정됩니다. – qingbo

+0

@ 칭보, 감사합니다. 결정된. –