5

カラーボックス (jQuery の一種のライトボックス) を機能させようとしているページに問題があります。FireFox(3.5.3)にdocument.bodyあるため、明らかに機能しません。nullこれは、カラーボックスが機能する Safari (4.0.3) には当てはまりません。

(私は Drupal 6 を使用しています) drupal は、いくつかの JavaScript 変数をページの一番下、終了 body および html タグの下に設定するための script タグを追加しました。そうでなければ、問題はありません。残念ながら、そうしないようにするのに苦労しています。これがFFの体に問題を引き起こしているのでしょうか?

Firefox で colorbox のサンプル ファイルを使用しても機能します (そして、document.bodyそこで定義されています)。

jQuery を使用しておそらくdocument.body何かをプロパティに補充する方法はありますか$()、それともスクリプト タグを html タグの外側に置かないように drupal を叩き続ける必要がありますか (言うよりも簡単です)。

ページの読み込みが完了した後document.bodyでも、それを明確にするため。nullFirebug コンソールのキャプチャは次のとおりです。

>>> document.body
null
>>> $().attr('body')
null
4

5 に答える 5

9

nullの通常の理由は、タグ (*) が検出さdocument.bodyれる前にスクリプトを実行しているためです。<body>コードを見ないとはっきりとは言えませんが、それが通常の理由です。スクリプトを配置した場所に移動します。

<p>(*: または、ブラウザーが認識しているような別の要素がボディの外に発生することはありません。その場合<body>、欠落しているマークアップを修正するためにサイレントに が追加されます。特定の通常はボディ内タグの解析の違いが説明される場合があります。 Safari で問題を解決できる理由です。)

これがFFの体に問題を引き起こしているのでしょうか?

いいえ。これは壊れたマークアップであり、Drupal はそれを行うべきではありませんが、 を閉じても適切な DOM ノードの参照が</body>停止するわけではありません。document.body

jQueryを使用してdocument.bodyを補充する方法はありますか

いいえ、document.bodyは基本的に と同じようdocument.getElementsByTagName('body')[0]に反射するだけなので、設定しようとしても意味がありません。また、 で body が見つからない場合document.body、jQuery もそれを見つけることができません$('body')

于 2009-10-27T14:11:07.277 に答える
1

jQuery と一緒に別の JS フレームワークを使用していませんか? もしそうなら、互換性を維持するために両方のライブラリをロードする方法に気を配りましたか (順序、互換性修正...) ?

于 2010-04-02T15:11:14.087 に答える
1

body タグの下に Drupal からの出力があってはなりません。テーマpage.tpl.phpファイルを確認してください。最後は次のようになります。

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

</body>
</html>

$closure 変数の出力の下に print ステートメントがあってはなりません。これは、最後のコンテンツ出力である必要があるためです (ただし、本体内にはあります)。

于 2009-10-27T15:47:12.200 に答える
0

申し訳ありませんが、この答えはjqueryにありません(私は過去数時間、プロトタイプで似たようなことに取り組んできました)。

基本的に、bobince からの一番の回答は非常に役に立ちますが、文書の本文再割り当てして、そのトリックを見つけることができます。

これはプロトタイプですが、アイデアはわかります。

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

content は、通常のセレクターで見つけることができるページ上の定義済みの要素であり、どれを使用しても問題ありません。そこから上に移動し、次に下に移動して body 要素に沿って進みます。

私が言ったように、私の問題は似ているだけで、これがあなたにとってどうなるかはわかりませんが、少なくとも誰かのアイデアを引き起こすことを願っています.

于 2010-09-28T03:34:34.683 に答える
0

これは奇妙ですが$(document).ready(function(){});、体を壊していた修正の下部に次の行を追加するだけです:

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

しかし、そもそもなぜ壊れたのか、サファリで壊れなかった理由をもっと調べる必要があります。

于 2009-10-27T14:28:52.453 に答える