2017-06-28 1 views
-2

Einfach eine (wahrscheinlich, mich zu kennen)jQuery-Position() Rückkehr falsch, dann richtig, führt

ich ein Element zu einer (Wordpress) Website am anhängen. Standardeinrichtung nichts Außergewöhnliches.

Die Zeile lautet wie folgt aus:

jQuery('[id*="my-required-id-text"]').append('<div class="my-appended-div">A Div</div>') 

Nun, mein Problem ist, dass, wenn ich dann durch jede angehängte div Position Zyklus wurde mit:

console.log(jQuery('.my-appended-div').last().position()) 

I - irritierend - erhalten alle oberen und linken Positionen, genau gleich. Irritierender, wenn ich einen on-Klick für die Klasse tun würde, und console.log für die Position in diesem setzen, würde es die richtigen Positionen für was auch immer ich klicke zeigen.

Warum ist das? Ich reiße - was übrig ist - meine Haare raus.

Ich weiß, ich war ein bisschen vage, aber bitte nehmen Sie an, dass mein CSS und der Rest des relevanten Codes korrekt ist. Ich möchte nur wissen, warum die Position falsch erkannt wird und genau wie alle anderen (visuell anders platzierten) divs, aber sofort nach dem Ausführen der Schleife (yeah das ist eine Schleife, die divs abhängig von der Menge an Daten ausgibt), und Wenn die Ausgabe einem anderen Event zugewiesen wird, sind die Positionen plötzlich alle console.logged.

Vielen Dank für das Lesen.

+1

"Bitte gehen Sie davon aus ..." Nein, Sie sollten alle Ihre relevanten Code (einschließlich HTML) posten, damit diejenigen von uns, die Ihnen helfen möchten, das ganze Bild erhalten können. – Spartacus

+0

Uh 'jQuery ('. Mein angehängter-div'). Last()' bekommt nur den letzten, da gibt es keine Iteration? – adeneo

+0

Ich habe den iterierenden oder irgendeinen anderen Teil des Codes nicht eingeschlossen, da ich nicht möchte, dass andere Dinge mit dem Problem verwechselt werden. Spartacus. "Sollte" bedeutet, dass es eine Regel gibt. Es gibt keine Regel. Ich habe solche Informationen ausdrücklich weggelassen, um Verwirrung vom eigentlichen Problem zu vermeiden. Sag mir nicht, was ist was, wenn du was falsch gemacht hast. – AnotherCoder

Antwort

0

Es erscheint am wahrscheinlichsten, weil Sie nur die .last() - Konsole mehrfach protokollieren. Die Positionsantwort, die du bekommst, wird dir natürlich nur die Positionen oben und links geben, weil dir position() nur den oberen und linken Versatz vom Elternteil gibt - see the docs - aber selbst wenn du loopst, ist die .last() div wird sich nicht ändern, während es loops ... es ist das gleiche div.

Natürlich könnte ich falsch liegen (Sie haben Ihren Code nicht gepostet), aber ich bin ziemlich zuversichtlich, dass das Problem ist. Wahrscheinlich möchten Sie eine Schleife mit einem anderen Selektor erstellen (vielleicht mit einem, der stattdessen dieses als Selektor verwendet).

+0

Ich bin - im echten Code - durch jedes einzelne div korrekt iterieren und nicht nur das letzte, da jede Iteration ein div anfügt, das dann das letzte wird. – AnotherCoder

+0

Richtig, was ich sagen will ist, dass Javascript asynchron ist, dass man mit der Append-Schleife richtig durchschleifen kann, aber zu dem Zeitpunkt, an dem man das console.log-Problem bekommt, ist die Schleife bereits fertig, so dass nur die letzte ausgedruckt wird.) div x Anzahl der Male.[Sehen Sie das, wenn Sie nicht verstehen, was ich meine] (http://www.datchley.name/loop-variable-gotcha/) – yoursweater

+0

Ok Ich verstehe, was du meinst. Nicht vorher. Danke für die weitere Erläuterung. Ich hatte während des Tests IDs hinzugefügt, bekam aber beim gezielten Targeting das gleiche Ergebnis. Ich werde jetzt jedoch zu diesem Test zurückkehren, um das beschriebene Szenario zu vermeiden. – AnotherCoder

0

Ich bin über Ihre Frage nicht sicher, aber versuchen Position nach dem „jeder“ zu erhalten wie folgt aus:

$objects.each(function(){ 
    ... 
}).promise().done(function(){ 
    $('.my-appended-div').last().position(); 
}); 

Kleine Genauigkeit: Position() abhängig von diesem Elternteil und Offset() abhängig von dem Fenster .

+0

Ich sehe was du da versuchst. Ich bekomme jQuery.each (...). Versprechen ist keine Funktion. – AnotherCoder

Verwandte Themen