سؤال

لدي مشكلة مع الصفحة التي أحاول الوصول إليها صندوق الالوان (نوع من العرض المبسط لـ jQuery) يعمل.يبدو أنه لا يعمل بسبب document.body كون null في فايرفوكس (3.5.3).ليس هذا هو الحال في Safari (4.0.3) حيث يعمل صندوق الألوان.

الشيء الذي يتبادر إلى ذهني هو أنني (أنا أستخدم Drupal 6) قام drupal بإلحاق علامة برنامج نصي لتعيين بعض متغيرات JavaScript في أسفل الصفحة، أسفل نص الإغلاق وعلامات html.وإلا فلا أرى مشكلة.لسوء الحظ، أواجه صعوبة كبيرة في عدم القيام بذلك.هل يمكن أن يكون هذا هو السبب وراء وجود مشاكل في الجسم مع FF؟

إن استخدام ملفات أمثلة colorbox في Firefox يعمل (وملف document.body يتم تعريفه هناك).

هل هناك أي طريقة يمكنني من خلالها استخدام jQuery لإعادة ملء ملف document.body الملكية مع شيء من $() ربما، أو هل يجب أن أواصل الضرب على drupal حتى لا أضع علامة البرنامج النصي خارج علامات html (القول أسهل من الفعل)؟

لتوضيح document.body يكون null حتى بعد الانتهاء من تحميل الصفحة.إليك التقاط وحدة تحكم Firebug:

>>> document.body
null
>>> $().attr('body')
null
هل كانت مفيدة؟

المحلول

والسبب document.body المعتاد هو باطل لأن كنت تنفيذ البرنامج النصي قبل علامة <body> (*) تم مصادفة. دون أن يرى كود لا أستطيع أن أقول على وجه اليقين، ولكن يهمني أن يكون السبب المعتاد. نقل حيث كنت قد وضعت البرامج النصية.

و(*: أو عنصر آخر مثل <p> أن المتصفح لا يعرف يمكن أن يحدث خارج الجسم، وفي هذه الحالة فإنه يضيف بصمت <body> لإصلاح العلامات المفقودين وهناك فرق في إعراب بعض عادة-في-. قد يفسر-العلامات الجسم لماذا سفاري يسمح لك لتفلت من العقاب.)

<اقتباس فقرة>   

ويمكن أن يكون هذا الذي يسبب FF لديهم قضايا مع الجسم؟

ولا. انها الترميز مكسورة ويجب دروبال لا نفعل ذلك، ولكن إغلاق </body> لا يتوقف document.body الرجوع إلى عقدة DOM المناسبة.

<اقتباس فقرة>   

هل هناك أي طريقة يمكن أن تستخدم مسج لإعادة ملء document.body

لا، document.body التي تعكس فقط أساسا نفس document.getElementsByTagName('body')[0]، لذلك يحاول أن يثبت هو ليس من المعقول، وإذا لم تتمكن من العثور على جثة عليها document.body، سوف مسج لا تكون قادرة على العثور عليه مع $('body') سواء.

نصائح أخرى

ويجب ألا يكون هناك أي الإخراج من دروبال أسفل العلامة الجسم. التحقق من ملف المواضيع page.tpl.php الخاص بك. نهاية يجب أن تبدو الى حد كبير مثل هذا:

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

</body>
</html>

ويجب أن يكون هناك بيان طباعة أدناه إخراج المتغير $ الإغلاق، وهذا يحتاج إلى إخراج المحتوى الماضي (ولكن لا يزال <م> في الجسم).

ولا يمكنك استخدام إطار JS آخر مع مسج؟ إذا كان الأمر كذلك، لم تعتني كيفية تحميل كلا مكتبات بحيث تظل متوافقة (النظام، وإصلاح توافق ...)؟

وحسنا هذا أمر غريب، ولكن فقط إضافة هذا الخط في الجزء السفلي من بلدي $(document).ready(function(){}); ثابتة مهما كان يخرق الجسم:

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

ولكن سآخذ لتبدو أكثر في ماذا حصل كسر في المقام الأول، وأيضا لماذا لم كسر في رحلات السفاري.

آسف أن هذه الإجابة ليست في jquery (لقد كنت أتصارع مع شيء مشابه خلال الساعتين الماضيتين باستخدام النموذج الأولي).

في الأساس، أفضل إجابة من Bobince مفيدة جدًا، مهما كانت حالتك يستطيع أعد تعيين نص المستند، فالخدعة هي العثور عليه.

هذا نموذج أولي لكنك حصلت على الفكرة،

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

عندما يكون المحتوى عبارة عن عنصر محدد في الصفحة، يمكنك العثور عليه باستخدام المحددات المعتادة، ويمكن استخدام أي منها فلا يهم حقًا، ومن هناك تنتقل إلى الأعلى ثم إلى الأسفل وعلى طول عنصر الجسم.

آمل أن يساعد ذلك، كما قلت أن مشكلتي كانت متشابهة فقط، ولست متأكدًا من كيفية سير الأمر بالنسبة لك، ولكن آمل أن يؤدي ذلك على الأقل إلى إثارة فكرة لشخص ما.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top