Frage

Ich habe ein problem mit einer Seite, wo ich versuche zu bekommen colorbox (eine Art der lightbox jQuery) zu arbeiten.Es funktioniert nicht, wahrscheinlich wegen der document.body wird null in FireFox (3.5.3).Dies ist nicht der Fall in Safari (4.0.3), wo die colorbox funktioniert.

Etwas, springt bei mir ist, dass (ich verwende Drupal 6) drupal angehängt ein script-tag, um einige JavaScript-Variablen auf der Unterseite der Seite, unter dem schließenden body und html tags.Ansonsten sehe ich nicht ein problem.Leider bin ich mit viel Mühe, es nicht zu tun.Könnte es sein, das die Ursache FF haben Probleme mit dem Körper?

Mit colorbox ' s die Beispiel-Dateien in Firefox funktioniert (und die document.body dort definiert ist).

Gibt es eine Möglichkeit, die ich verwenden könnte, jQuery nachfüllen document.body Eigenschaft mit so etwas aus $() vielleicht, oder sollte ich schlug auf drupal um nicht einen script-tag außerhalb des html-tags (leichter gesagt als getan)?

Um zu klären, document.body ist null auch nachdem die Seite vollständig geladen wurde.Hier ist ein Firebug-Konsole aufnehmen:

>>> document.body
null
>>> $().attr('body')
null
War es hilfreich?

Lösung

Die üblichen Grund document.body ist null, da bist du der Ausführung des Skripts, bevor Sie das <body> tag(*) aufgetreten.Ohne zu sehen-code kann ich nicht sicher sagen, aber das wäre der übliche Grund.Bewegen, wo Sie haben die Skripte.

(*:oder ein anderes element, wie zum Beispiel <p> der browser weiß nicht auftreten kann außerhalb des Körpers, in welchem Fall es leise fügt eine <body> korrigieren Sie Ihre fehlende markup.Ein Unterschied in der Analyse bestimmter Regel-im-Körper-tags könnte erklären, warum Safari können Sie mit ihm Weg erhalten.)

Könnte es sein, das die Ursache FF haben Probleme mit dem Körper?

Nein.Es ist gebrochen markup und Drupal sollten es nicht tun, aber schließen der </body> nicht zu stoppen document.body die Referenzierung der richtige DOM-Knoten.

Gibt es eine Möglichkeit, die ich verwenden könnte, jQuery zu Befüllen Sie das Dokument.Körper

Nein, document.body nur spiegelt im Grunde das gleiche wie document.getElementsByTagName('body')[0], so versucht man es nicht sinnvoll ist, und wenn Sie nicht finden können, ein Körper mit document.body, Sie jQuery nicht in der Lage zu finden es mit $('body') entweder.

Andere Tipps

Es sollte keine Ausgabe von Drupal unter dem Body-Tag sein. Überprüfen Sie Ihre Themen page.tpl.php Datei. Das Ende sollte so ziemlich wie folgt aussehen:

<!-- BEGIN closure: must always be last element in body -->
    <?php print $closure; ?>
<!-- END closure -->

</body>
</html>

Es sollte unter dem Ausgang der $ Schließung Variable keine print-Anweisung sein, da dies der letzte Inhalt ausgegeben werden muss (aber noch innerhalb Körper).

Haben Sie nicht eine andere JS Rahmen zusammen mit jQuery? Wenn ja, haben Sie kümmern sich, wie die beiden Bibliotheken geladen werden, so dass sie kompatibel bleiben (Auftrag, Kompatibilitätsfix ...)?

Nun ist dies seltsam, aber gerade das Hinzufügen dieser Zeile am unteren Rand meines $(document).ready(function(){}); fixiert was anbrach den Körper:

  if(null==document.body){document.body = $('body')[0];}

Aber ich werde mehr suchen müssen, warum es in erster Linie gebrochen hätte, und auch, warum es nicht in Safari zu brechen hat.

leider diese Antwort nicht in jquery ist (Ich habe mit etwas Ringen ähnlich in den letzten paar Stunden mit Prototyp).

Grundsätzlich ist die Top-Antwort von bobince ganz recht hilfreich, aber Sie können Wieder zuordnen das Dokument Körper der Trick ist zu finden.

Dies ist Prototyp, aber Sie bekommen die Idee,

body = $("content").ancestors().last().children[1];

Wo Inhalte einige definierte Element auf der Seite, die Sie mit den üblichen Selektoren finden können, kann jeder es nicht wirklich keine Rolle spielt verwendet werden, von dort nach oben durchqueren und dann nach unten und entlang an das Körperelement.

Ich hoffe, das hilft, wie ich schon sagte, mein Problem nur ähnlich war, nicht sicher, wie dies für Sie gehen, aber ich hoffe, dass es zumindest eine Idee für jemanden auslöst.

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