2012-06-14 5 views
3

Чтение документов, я ожидал бы $("#wrap2").remove(".error"), чтобы удалить все .error элементов из #wrap2. Однако, глядя на этот JSFiddle: http://jsfiddle.net/hCGUS/ это не так?

$(function() { 
    $("#wrap1 .error").remove(); // works 
    $("#wrap2").remove(".error"); // fails ... 
})​ 

ответ

3

В соответствии с документом jQuery. Я думаю, что

$("#wrap2").remove(".error"); 

равна:

$("#wrap2.error").remove(); 

Означает, что элемент имеет идентификатор wrap2 и класс error

3

The docs сказать, что при переходе аргумента, он действует как фильтр на обернутый набор его называют дальше, так что если у вас есть набор JQuery, но только хочу, чтобы удалить некоторые из элементов в наборе, вы можете передать селектор, чтобы удалить только те.

8

В состоянии Документов, параметр селектора, чтобы удалить это

Выражения селектора, который фильтрует набор соответствующих элементов, чтобы быть удалено.

Первый пример того, что вы должны использовать, чтобы удалить элементы с классом error, содержащихся в элементе с идентификатором wrap1.

Второй пример найдет элемент с идентификатором wrap2 и затем фильтрует этот набор для элементов с классом error и удалит эти элементы. То есть, он удаляет только элементы, которые соответствуют #wrap2.error.

1

Строительство от ответа x1a4, в $("wrap2") содержит только один элемент, а не какой-либо из своих детей , Если вы это сделали:

$("wrap2 *").remove(".error") 

он будет работать идентично вашей рабочей версии.

+0

или: '$ ('# wrap1'). Find ('. Error'). Remove()' – steveax

+1

зачем использовать 'find' здесь? Вы можете сделать '$ ('# wrap .error'). Remove()' – x1a4

-3

Пожалуйста, используйте removeClass вместо удаления

$ ("# wrap2") removeClass ("ошибка").