اذهب إلى المحتوى
  • 0

كيفية إنشاء مكون طي accordion شبيه بالخاص ببوتسراب عن طريق الجافاسكربت؟

zainb mohd

السؤال

لما اضغط علي ال+ الاولي بيخفي لي المحتوي الاول الخاص ب  Haw are you?
وعندما اضغط علي ال+ الثانيه بيخفي لي المحتوي الاول وليس الثاني
وانا اريد ال+ الثانيه تخفي المحتوي الثاني الخاص ب Haw old are you?
https://codepen.io/zzzzz99990/pen/bGvaWmg
 

Screenshot 2022-07-31 132527.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

مرحبا .

الخطا فى هذا الجزء من الكود 

const allplus =document.querySelectorAll(".plus")
  // 
allplus.forEach(item => {
item.addEventListener("click", (eo) => {

const content=document.getElementsByClassName("content")[0] // الخطا هنا حيث يقوم دائما باخذ العنصر الاول من ال array

  content.classList.toggle("mm")
})


});

 ولحل المشكلة نريد كل عنصر ان ياخد ال class الخاص بالابن له ويمكننا تنفيذه كالتالى .

const allplus =document.querySelectorAll(".plus")
  // 
allplus.forEach((item,index) => {
item.addEventListener("click", (eo) => {

const content=document.getElementsByClassName("content")[index] // هنا قمنا باستخدام متغير لمكان العنصر وبذلك كل عنصر يستخدم الchild الخاص به

  content.classList.toggle("mm")
})


});

 

تم التعديل في بواسطة محمد عاطف11
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يحدث هذا لأنك تقومين بإظهار العنصر الأول عند استهداف اي حدث ضغط يخص عناصر + في:

const content = document.getElementsByClassName("content")[0];

سيعني هذا اختفاء واظهار العنصر الاول عند الضغط على علامة + الاولى والثانية بذات الوقت.

لتجاوز هاته المشكلة، سنحتاج تمييز اشارة ال + الاولى عن الثانية، لنقم بتعريف فهرس المكون المستهدف في عنصر الاشارة + الذي نريده. ثم سيسهل تحديده عن طريق الجافاسكربت عند الضغط عليه وبالتالي اظهار او اخفاء العنصر المراد.

لنقم باضافة الخاصيتين data-target-index في كل من عنصري plus كـ:

  • العنصر الاول
<span class="plus" data-target-index="0">+</span>
  • العنصر الثاني
<span class="plus" data-target-index="1">+</span>

ثم عن طريق الجافاسكربت نقوم اولا بالتقاط القيمة المخزنة في data-target-index الخاصة بالعنصر المضغوط عليه:

allplus.forEach(item => {
     item.addEventListener("click", (eo) => {
          var target = item.dataset.targetIndex;

وأخيرا استعمال الفهرس المحصل عليه في تحديد العنصر المستهدف واظهاره او اخفاءه:

var content = document.getElementsByClassName("content")[target];

content.classList.toggle("mm")
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...