2017-09-15 3 views
-4

Benötigen ein Selektor Äquivalent der Funktion $.fn.closest() z.jQuery: engste() CSS-Selektor

$('.wrapper:eq(0)>h1>strong:closest(.wrapper)') 

Umsetzung sollte .wrapper Element zurück, welches das erste auf der Seite und enthält h1, welche strong Element folglich enthält.

Eigentlich ist ein Beispiel oben nur ein Beispiel. In der realen Welt brauche ich $.fn.draggable, um eine dynamische containment Eigenschaft einzurichten.


UPDATE

Dinge klarer zu bringen: (. Für ex) gibt es Baum Wrapper div.wrapper auf der Seite, gefolgt von einer anderen. Jeder Wrapper ist mit Geschwisterumhüllungen als sortierbarer Bereich verbunden. Sortierbare Artikel sind div.sub-wrapper und werden über einen der Wrapper gelegt, sodass sie zu den anderen Wrappern verschoben werden können. Jedes sortierbare Element hat ein untergeordnetes Element div, das das ziehbare Element ist. Was ich eigentlich brauche, ist, die draggable.options.containment der letzteren auf den übergeordneten Wrapper zu setzen, der das letzte (ziehbare) Element ist, das sich momentan befindet. Das Hauptproblem besteht darin, dass, wenn ich die Eindämmung wie Register wird

{containment: $('div.draggable').closest('div.wrapper')} 

dann wird es nicht richtig, wenn ich die div.sub-wrapper auf die andere div.wrapper bewegen wird - das Behälterelement bleibt gleich - ein altes div.wrapper die ziehbar war zuvor bei.

+3

CSS-Selektoren haben nicht das Privileg, Vorfahren auszuwählen. –

+0

Ich fürchte, das ist ziemlich unklar. Benötigen Sie wirklich einen ** CSS ** - Selektor oder nur einen jQuery-Aufruf, der das Element findet (was bedeutet, dass Sie jQuery-isms darin verwenden können, und/oder nachfolgende Aufrufe, um die Ergebnismenge einzuschränken)? Brauchen Sie, was Sie in dem Absatz gesagt haben, der mit "Implementierung sollte ..." beginnen sollte oder was Sie im letzten Absatz brauchen, die nicht das Gleiche zu sein scheinen? Getrennt: Was haben Sie getan, um das Problem zu lösen? Was hat Ihre Forschung ergeben? Was haben/haben Sie in [der jQuery API] (http://api.jquery.com/) gefunden, das/hat nicht geholfen? –

+1

A [mcve] würde ** wirklich ** helfen. Das Beschreiben von Code/Markup ist immer viel weniger klar als das Zeigen eines MCVE dieses Codes/Markups, der das Problem tatsächlich zeigt. –

Antwort

1

Ich denke Sie :has()

$('.wrapper:has(>h1>strong)') 
+0

Leider suche ich nicht danach. Thx für den Link zu den Dokumenten, ich weiß, wie funktioniert diese Funktion. – impulsgraw

+0

Nicht sicher, was Sie meinen, es tut nicht, was Sie wollen .... Vielleicht html mit was abgestimmt werden müsste, würde helfen. Also, wenn Sie zwei Wrapper haben, als Sie brauchen, um die hat auf innere .... Oder leben mit der Tatsache, dass es in zwei Anrufe getan werden muss, muss nicht alles eine Zeile sein. – epascarello

+0

Ich habe die Frage aktualisiert, um die Dinge klarer zu machen. Diese Lösung wird mir nicht helfen, weil das '.wrapper' Element dynamisch geändert wird. Also, was habe ich - ist ein DOM-Element, das ziehbar ist. Ich habe es Zeiger in einer Variablen.Und ich muss der "jQuery.fn.draggable" -Bibliothek mitteilen, dass sie die "containment" -Eigenschaft (die ein HTMLElement-Typ ist) auf den aktuellsten '.wrapper' von sich selbst setzt. Die einfachste Lösung, die ich anwende, ist die Verwendung des Selektors ': nearest (.wrapper)', aber das ist unmöglich wegen ': engster()' Selektor existiert nicht, also muss ich es irgendwie implementieren. – impulsgraw

0

Basierend auf Ihrem Update verwenden möchten, ich vermute, dass Sie die draggables einzeln initialisieren müssen und nicht als ein Satz:

$("selector-for-your-draggables").each(function() { 
    var $this = $(this); 
    $this.draggable({ 
     // ...other options here... 
     containment: $this.closest(".wrapper") // or .sub-wrapper, I couldn't 
               // tell from the description 
    }); 
}); 

Sie gesprochen haben über den Elternteil ist es "im Moment". Ich kann nicht verstehen, was Sie damit meinen, aber wenn sich das Element, das Sie ändern möchten, ändern soll, benötigen Sie einen "options" Anruf, um containment zu aktualisieren, wenn das passiert.

Verwandte Themen