2009-09-10 2 views
46

jQuery упрощает удаление узлов из DOM. Но как вы удаляете что-то из объекта jQuery?Удалить элемент из объекта jQuery

+2

Что вы пытаетесь удалить? – acrosman

+0

@acrosman - Ничего особенного. Я просто хочу узнать больше о том, как jQuery делает свою магию. На сайте jQuery есть хорошая документация относительно API, но (кроме как через источник) я не видел много документации о внутренней работе объекта jQuery. –

ответ

51

Если вы говорите об удалении узлов из объекта jQuery, используйте функции filter или not. See here for more.

Как использовать filter:

var ps = $('p'); 

//Removes all elements from the set of matched elements that do 
//not match the specified function. 
ps = ps.filter(function() { 
    //return true to keep it, false to discard it 
    //the logic is up to you. 
}); 

или

var ps = $('p'); 

//Removes all elements from the set of matched elements that 
//do not match the specified expression(s). 
ps = ps.filter('.selector'); 

Как использовать not:

var ps = $('p'); 

//Removes elements matching the specified expression 
//from the set of matched elements. 
ps = ps.not('.selector'); 
+0

@ geowa4 - спасибо за ответ. Знаете ли вы, что фильтр удаляет узел из объекта глобально или просто локален для его функции? –

+8

Одна вещь, которая меня сбила с толку - это ничего не удалит из кэшированного селектора, если вы не переназначаете. Поэтому вам нужен ps = ps.filter (function() {// stuff}); – SimplGy

1
<ul> 
    <li class="1" /> 
    <li class="2" /> 
    <li class="3" /> 
    <li class="4" /> 
    <li class="5" /> 
</ul> 

Фильтр итерацию по коллекции объектов JQuery. Для каждого из элементов: возвращайте true внутри filter(), чтобы сохранить текущий элемент в коллекции объектов jQuery. Верните false, чтобы удалить текущий объект из коллекции объектов jQuery.

$("li").filter(function() 
{ 
    if (this.className == "1" || this.className == "2") return true; 

    return false; 
}); 

В этом случае; анонимная функция, выполняемая filter(), вернет true для элемента списка, который имеет класс и/или , в свою очередь удаляя последние три списка из коллекции объектов jQuery.


Практический пример:

<ul> 
    <li class="1" /> 
    <li class="2" /> 
    <li class="3" /> 
    <li class="4" /> 
    <li class="5" /> 
</ul> 

Этот фрагмент кода добавляет класс ("синий") в неупорядоченном списке. Затем выделяются первые два списка. Затем присоединяет щелчок-обработчик первых два элементы списка:

$(function() 
{ 
    $("ul").addClass("blue").find("li").filter(function() 
    {   
     if (this.className == "1" || this.className == "2") return true; 

     return false; 

    }).addClass("highlight").click(function() 
    { 
     alert("I am highlighted!"); 
    }); 
}); 
+0

fyi, который будет возвращать false каждый раз. вы перебираете 'ul', а не 'li', которые имеют классные имена. – geowa4

+0

Brain-fart :) Спасибо за хедз-ап. – roosteronacid

8

Как уже отмечалось, $.filter() отличный вариант для фильтрации данных. Также обратите внимание, что the jQuery object can be handled like an array, и поэтому вы можете использовать методы массива, такие как splice().

var people = $(".people"); 
people.splice(2,1); // Remove 1 item starting from index 2 
+0

@ geowa4: Прочтите http://www.learningjquery.com/2008/12/peeling-away-the-jquery-wrapper – Sampson

+1

@ Джонатан: вы его прочитали? bc он не говорит, что это массив. вы можете получить один, конечно, и jQuery может вести себя как массив в некотором роде. но это еще не массив - важное различие. на самом деле, некоторые функции массива работают над объектом jQuery, как отмечено в моем первом комментарии. – geowa4

+0

@ geowa4: Да, я прочитал. Я знаю, что это не массив (технически), поэтому я извиняюсь за свои плохие формулировки.Я хотел сказать, что вы можете рассматривать его как массив, как указывал мой пример. – Sampson

Смежные вопросы