Frage

Man kann gebrauchen matchedset.find(selector) / matchedset.parents(selector) Damit die Nachkommen/Vorfahren des aktuellen Matched Set von einem Selektor gefiltert werden, enthält dies jedoch nicht das übereinstimmende Set selbst (wenn er auch mit dem Selektor übereinstimmt). Gibt es einen besseren (prägnanteren und/oder schnelleren) Weg, um es zu bekommen als

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

Und der jeweils für Eltern ()?

War es hilfreich?

Lösung

Du kannst das:

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

Für Eltern:

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

Andere Tipps

Ich denke, Ihre Methode ist in Bezug auf die Ausführungszeit effizient, aber Sie verlangen wahrscheinlich syntaktischen Zucker. Dafür könnten Sie es in ein Plugin einwickeln:

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

Dann benutze es so:

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

Wenn Sie Lust bekommen möchten, können Sie ein Plugin erstellen, das nicht nur für "Fund", sondern auch für "Eltern" und "Kinder" und andere ausgewählte Plugins funktioniert:

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

Dann würden Sie als erstes Argument das Traversal -Plugin angeben, das Sie anrufen möchten:

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

Nur für Kicks, ein weiteres lustiges Plugin, mit dem Sie eine willkürliche Anzahl von Durchfahrten auf einmal aufrufen können:

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

Sie können diese mit einer beliebigen Kombination von ausgewählten Plugins wie folgt aufrufen:

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

Während Jeoffs Lösung schön ist, ist es manchmal schön, alle Elemente, einschließlich sich selbst ohne Selektor, zu iterieren. Dieses Add-On ist etwas flexibler:

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

Schauen Sie sich die Funktion "und Self ()" an.

Für Eltern hast du closest(selector)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top