2011-08-25 37 views
3

說得很簡單...

我有元素clone。其div與保存在其中的一些其他標籤。它也有.x在裏面。

我需要刪除它,然後apped修改元素到另一個元素。

不幸的是,它不起作用。刪除失敗的東西,但.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

'subtitle'是另一個元素。 – daGrevis

回答

2

這是因爲remove()將刪除DOM匹配的元素。即使你傳遞了一個選擇器,它也只是用來過濾這些元素。在你的代碼中,clone匹配一個單獨的元素(克隆的字幕),它不會暴露x類。

您可以使用find().x匹配元素:

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

remove()用於刪除元素。爲了移除一個類,你需要使用removeClass(className)。

+1

不,不,不。我想用選擇器'.x'刪除**元素**中的元素**。 – daGrevis

-1

你想從克隆中移除一個類嗎?如果是,則使用removeClass,如下所示:

clone.removeClass('x'); 
1

您打算從克隆內部刪除.x元素嗎?

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

+1。 http://api.jquery.com/remove/選擇器參數用於過濾'clone'變量,而不是選擇'clone'的子元素。但是這次'clone'可能是一個單獨的元素集,而元素沒有class'x',所以它失敗了。 – qingbo

1

你可以這樣說:

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

注意,您可以使用.detach()代替.remove()。這將保持附加到元素的任何元數據。

+0

我不知道這是爲什麼,但它刪除**所有**其他與'.x'匹配的元素。滑稽! – daGrevis

+0

這是因爲'.detach'返回分離的元素,結果被分配給'no_label'。第三條語句附加'no_label'而不是'clone'。將其更改爲'more_subtitles.append(克隆);'將修復它。 – qingbo

+0

@qingbo,謝謝。固定。 –