jquery - son - get childrens



Procurando pelo método find(..) do jQuery que inclui o nó atual (8)

A resposta aceita é muito ineficiente e filtra o conjunto de elementos que já são correspondidos.

//find descendants that match the selector
var $selection = $context.find(selector);
//filter the parent/context based on the selector and add it
$selection = $selection.add($context.filter(selector);

https://ffff65535.com

O método de passagem de jQuery find(..) não inclui o nó atual - ele começa com os filhos do nó atual. Qual é a melhor maneira de chamar uma operação de localização que inclua o nó atual em seu algoritmo de correspondência? Olhando através dos docs nada imediatamente salta para mim.



Definir

$.fn.findSelf = function(selector) {
    var result = this.find(selector);
    return (this.is(selector)) ?
        result.add(this) : result;
};

então use

$.findSelf(selector);

ao invés de

$find(selector);

Infelizmente, o jQuery não tem este built-in. Realmente estranho por tantos anos de desenvolvimento. Meus manipuladores AJAX não foram aplicados a alguns elementos principais devido a como o .find () funciona.


Eu penso e o .andSelf() é o que você quer:

obj.find(selector).andSelf()

Observe que isso sempre adicionará de volta o nó atual, independentemente de corresponder ou não ao seletor.


Para jQuery 1.8 e acima, você pode usar .addBack() . É preciso um seletor para que você não precise filtrar o resultado:

object.find('selector').addBack('selector')

Antes do jQuery 1.8, você estava preso com .addBack() , (agora preterido e removido), que precisava de filtragem:

object.find('selector').andSelf().filter('selector')

Se você está olhando estritamente no (s) nó (s) atual (is), você simplesmente faz

$(html).filter('selector')

Você não pode fazer isso diretamente, o mais próximo que consigo pensar é usando .andSelf() e chamando .filter() , assim:

$(selector).find(oSelector).andSelf().filter(oSelector)
//or...
$(selector).find('*').andSelf().filter(oSelector);

Infelizmente .andSelf() não pega um seletor, o que seria útil.


$('selector').find('otherSelector').add($('selector').filter('otherSelector'))

Você pode armazenar $('selector') em uma variável para acelerar. Você pode até escrever uma função personalizada para isso se você precisar muito:

$.fn.andFind = function(expr) {
  return this.find(expr).add(this.filter(expr));
};

$('selector').andFind('otherSelector')




jquery