Pergunta

Pode -se usar matchedset.find(selector) / matchedset.parents(selector) Para obter os descendentes/ancestrais do conjunto atual correspondente filtrado por um seletor, mas isso não inclui o conjunto correspondente (se ele também corresponde ao seletor). Existe uma maneira melhor (mais concisa e/ou mais rápida) de obtê -lo do que

matchedset.find(selector).add(matchedset.filter(selector))

e os respectivos para os pais ()?

Foi útil?

Solução

Você consegue fazer isso:

matchedset.find('*').andSelf().filter(selector);

Para os pais:

matchedset.parents('*').andSelf().filter(selector);

Outras dicas

Eu acho que seu método é eficiente em termos de tempo de execução, mas o que você provavelmente está pedindo é o açúcar sintático. Para isso, você pode envolvê -lo em um plugin:

  jQuery.fn.findAndSelf = function(selector) {
    return this.find(selector).add(this.filter(selector))
  }

Em seguida, use assim:

$('.whatever').findAndSelf('.awesome')

Se você quisesse se buscar, poderia criar um plugin que funcione não apenas para 'encontrar', mas para 'pais' e 'filhos' e outros plugins baseados em seletor:

  jQuery.fn.withSelf = function(plugin, selector) {
    return this[plugin](selector).add(this.filter(selector))
  }

Então você fornece como o primeiro argumento do plug -in Traversal que deseja ligar:

$('.whatever').withSelf('find', '.awesome')
$('.whatever').withSelf('parents', '.awesome')

Apenas para chutes, outro plugin divertido que permite chamar um número arbitrário de plugins de travessia de uma só vez:

  jQuery.fn.traverse = function(plugins, selector) {
    var set = new jQuery();
    $.each(plugins, function(i, val) {
      set.add(this[val](selector));
    }
    return set
  }

Você pode invocar este com qualquer combinação de plugins baseados em seletor, como segue:

$('.whatever').traverse(['find','filter'], '.awesome')
$('.whatever').traverse(['parents','find'], '.awesome')
$('.whatever').traverse(['parents', 'filter'], '.awesome')

Embora a solução de Jeoff seja boa, às vezes é bom poder iterar todos os elementos, inclusive a si mesmo sem um seletor. Este complemento é um pouco mais flexível:

$.fn.all = function(selector) {
    if(selector===window.undefined) return this.find('*').andSelf();
    return this.filter(selector).add(this.find(selector));
};

Procure a função "ANDELE ()".

Para os pais que você tem closest(selector)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top