2017-06-01 84 views
0

我對remove方法有些困惑。混淆了jQuery .remove()方法

var articleItems; 

articleItems = $('.article-item'); 
var firstArticleItem = articleItems.first(); 
firstArticleItem.find('ul').remove(); 

這上面的代碼工作,而這個人是不是

var articleItems; 

articleItems = $('.article-item'); 
var firstArticleItem = articleItems.first(); 
firstArticleItem.remove('ul'); 

我,如果你增加一個選擇,然後它會從DOM中移除想。 你能解釋爲什麼第二個解決方案是不工作的?

謝謝

+0

@ThisGuyHasTwoThumbs您可以將param傳遞給'remove()',它是一個選擇器,用於過濾要移除的元素。請參閱https://api.jquery.com/remove/ – sorayadragon

+0

@sorayadragon啊我看到 - 不知道:)將刪除我的評論:) – ThisGuyHasTwoThumbs

回答

1

$elems.remove()刪除集合$elems中的所有元素。您可以通過添加一個選擇器來過濾$elems集,以便僅刪除其中的一部分,如下所示:$elems.remove('.class')。這將刪除集合中也具有類「class」的所有元素。

大概你試圖做的是去掉一個孩子集合$elems,這不是它是如何工作的。但是,如果firstArticleItem實際上是一個<ul>元素,它會起作用,如下所示。

var articleItems; 
 

 
articleItems = $('.article-item'); 
 
var firstArticleItem = articleItems.first(); 
 
firstArticleItem.remove('ul');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="article-item"> 
 
<li>first item</li> 
 
</ul> 
 
<ul class="article-item"> 
 
<li>second item</li> 
 
</ul>

+0

謝謝你YOA是正確的。我想刪除設置的firstArticleItem的一個孩子。現在我明白爲什麼它不起作用。 –

1

第二個濾波器匹配的元素集合的。在這種情況下,firstArticleItem中的元素都不匹配ul選擇器,因此沒有任何反應。

// Remove 'ul' child elements of firstArticleItem 
firstArticleItem.find('ul').remove(); 

// Remove elements from firstArticleItem that also match 'ul' 
firstArticleItem.remove('ul'); 
1

由於$el.remove(selector)相當於$el.filter(selector).remove(),不$el.find(selector).remove()。換句話說,作爲參數傳遞的選擇器允許您從原始集合中選擇性地移除元素 - 而不是在它們的後代之間。引述docs

.remove([selector])

選擇

,其過濾待除去的匹配元素的選擇器表達式。

1

一個選擇器表達式,用於過濾要移除的匹配元素集合。

http://api.jquery.com/remove/

,以除去該參數是一個簡單的過濾器。它會在刪除之前檢查調用該方法的jQuery對象是否與選擇器匹配。要刪除與該選擇器匹配的所有後代,請改爲使用.find('ul').remove()

1

Remove方法不會過濾從當前對象包裝UL項目。

你需要一個過濾器()或find()來做到這一點。