Domanda

Si può usare matchedset.find(selector) / matchedset.parents(selector) per ottenere discendenti / antenati del set corrente corrispondente filtrato da un selettore, ma che non include la stessa Matched impostato (se succede che corrisponda al selettore troppo). C'è un modo migliore (più concisa e / o più veloce) per ottenere esso che

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

ed il relativo per i genitori ()?

È stato utile?

Soluzione

Si può fare questo:

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

Per i genitori:

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

Altri suggerimenti

Credo che il metodo è efficiente in termini di tempo di esecuzione, ma ciò che probabilmente stai chiedendo è zucchero sintattico. Per questo, si potrebbe avvolgere in un plugin:

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

Quindi utilizzare in questo modo:

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

Se si voleva ottenere l'immaginazione si potrebbe creare un plugin che funziona non solo per 'trovare', ma per 'genitori' e 'figli' e altri plugin di selezione basata su:

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

Poi devi fornire come primo argomento il plugin attraversamento che si desidera chiamare:

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

Solo per i calci, un altro plugin divertimento che ti permette di chiamare un numero arbitrario di plug-traversal tutti in una volta:

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

Si potrebbe richiamare questo uno con una qualsiasi combinazione di plugin selettore a base, come segue:

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

Mentre la soluzione di Jeoff è bello, a volte è bello essere in grado di scorrere tutti gli elementi, tra cui se stesso senza un selettore. Questo add-on è un po 'più flessibile:

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

Cercare il ") andSelf (funzione".

Per i genitori che avete closest(selector)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top