سؤال

إذا كان لدي قسمين، كلاهما بمعرف = "myDiv"

كان $("#myDiv").fadeOut(); تتلاشى كلا divs بها؟أم أنها سوف تتلاشى فقط الأول/الثاني؟أو لا شيء على الإطلاق؟

كيف يمكنني تغيير أي واحد يتلاشى؟

ملحوظة: أعلم أن المعرفات المكررة تتعارض مع المعايير ولكني أستخدم النافذة المنبثقة المشروطة fanbox وهي تقوم بتكرار المحتوى المحدد على صفحتك لمحتوى النافذة المنبثقة.إذا كان أي شخص يعرف طريقة للتغلب على هذا (ربما أستخدم Fancybox بشكل خاطئ) فيرجى إبلاغي بذلك.

هل كانت مفيدة؟

المحلول

يتطابق jQuery مع عنصر واحد بالضبط عند الاستعلام عن معرف.مجموعة من واحد على الأكثر Element سيتم إرجاع الكائن بواسطة $("#foo").get().انظر وثائق مسج لمزيد من المعلومات، أو جربه بنفسك.

$(function() {
    alert($("#foo").length);
});

نصائح أخرى

من المفترض أن تكون معرفات العناصر فريدة.إن وجود DIVs متعددة بنفس المعرف سيكون غير صحيح ولا يمكن التنبؤ به، ويتحدى الغرض من المعرف.إذا فعلت هذا:

$('.myDiv').fadeOut();

سيؤدي ذلك إلى تلاشي كلاهما، على افتراض أنك تمنحهما فئة myDiv ومعرفات فريدة (أو لا شيء على الإطلاق).

"ملحوظة:أعلم أن المعرفات المكررة تتعارض مع المعايير"

ثم لا تفعل ذلك.لقد اكتشفت بالفعل مشكلتين.إنه ينتهك المعايير، ويتعارض مع آلية اختيار jQuery (وفي الواقع DOM العادية).من المحتمل أن يكون هناك المزيد من المشكلات في المستقبل.

من المحتمل جدًا، أنت نكون استخدام Fancybox خاطئ، وفي هذه الحالة آمل أن يساعدك شخص مطلع عليه.أو ما هو أسوأ من ذلك، إذا كان البرنامج النصي نفسه معيبًا، فلا يجب عليك استخدامه.

نظرًا لأن $('#myDiv') لن يُرجع سوى القسم الأول الذي يحمل هذا المعرف، فسيتعين عليك العثور على جميع العناصر التي تحمل هذا المعرف باستخدام هذه الخدعة:

$('[id=myDiv]');

لذا، بالنسبة لحالتك، لتطبيق FadeOut على كل هذه الأقسام:

$('[id=myDiv]').fadeOut();

وإذا كنت تريد التأكد من أن صفحتك لا تحتوي على هذا المعرف مرتين، فيمكنك إزالة المعرف الإضافي عن طريق القيام بذلك:

$('[id=myDiv]:gt(0)').remove();

يمكنك أيضًا اتباع طريق استخدام البحث ().سيعيد البحث جميع العناصر التي تحمل هذا المعرف، ويمكنك قصر النطاق على أصل معين إذا لزم الأمر، جرب شيئًا مثل $(document).find('#myDiv').fadeOut();

أو

$('.parentElement').find('#myDiv').fadeOut();

وقعت في نفس المشكلة.على ما يبدو، عندما تقوم بإنشاء محتوى على الصفحة التي ترغب في فتح Fancybox منها، فإنه يقوم بإنشاء مرآة div للمحتوى الأصلي.في حالتي، تم تغليف عناصر التحكم في div الذي ينشئه Fancybox باسم "fancy_div"

تمكنت من تحديد عنصر التحكم والحصول على قيمته باستخدام التنسيق التالي للمحدد:

$('#fancy_div [id=InputText]').val();

قد تكون عناصر التحكم الخاصة بك موجودة في مكان آخر داخل Fancybox.أفضل ما يمكنك فعله هو إلقاء نظرة على مصدر العرض، لكنه أمر صعب.

للوصول إلى مصدر العرض، استخدم التقنية التالية:ضع هذه العلامة في النموذج الخاص بك:احصل على قيمة افتح النموذج الخاص بك ، وانقر فوق العلامة لفتح نافذة التنبيه.
تأكد من وجود المؤشر داخل محتوى الصفحة (ابحث عن عنصر التحكم وانقر عليه).
انقر بزر الماوس الأيمن خارج عنصر التحكم وحدد "عرض المصدر".
توجد مجموعة من divs، لذا ابحث عن div الذي يحتوي على المحتوى الخاص بك.

أتمنى أن يساعدك هذا.

لقد واجهت مؤخرًا مشكلة مماثلة.كان لدي صفحة واحدة تعرض محتوى مختلفًا من خلال تحميل Ajax.يوجد زر يقوم بتشغيل الخادم لإنشاء صورة PDF.

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

<a name="printButton"....

$('a[name="printButton"]').on('click',function(){....

عملت فقط مدهش!

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