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

السؤال

نشر

أريد حل هذا السؤال ولكن عندما أظهر الناتج في المتصفح تظهر القيمة الأخيرة فقط, بالرغم من انها تظهر بشكل صحيح في الكونسول

Screenshot 2021-09-03 193723.png

Screenshot 2021-09-03 193747.png

ملف main.js  : 

var i;
var x = document.getElementById('num');

function typeWord(){

    var y = x.value;
 
    for( i=y; i>0; i--){
        console.log(i);
        document.getElementById('demo').innerHTML= "<p>"+i+"</p>";
    }

}

بنية الـ html : 

<div>
    <label for="">enter your num</label>
    <input type="number" id="num">
    <button onclick=" typeWord();"> type word</button>
    <h1>The numbers is <span id="demo"></span></h1>
</div>

 

New folder.zip

Recommended Posts

  • 0
نشر (معدل)

إستخدم  insertAdjacentHTML بدلا من insertHtml  لأن insertHtml  تغير  element في كل دورة و تضع مكانه العنصر الجديد و لكن insertAdjacentHTML تضيف العنصر الجديد  فقط كالأتي

for( i=y; i>0; i--){

console.log(i)
    
    document.getElementById('demo').insertAdjacentHTML('beforeend',"<p>"+i+"</p>")
}

و لاحظ أن المتغير الأول beforeend تضيف element قبل نهاية selector

تم التعديل في بواسطة Ziyad Hasan
  • 1
نشر

السبب في هذا الأمر هو أنك في كل دورة من دورات الحلقة تقوم بإعادة تعيين محتوى الوسم الذي له ال id demo و لا تقوم بالإضافة للقيمة السابقة، لذلك يظهر لك في المتصفح القيمة الأخيرة(التي تنتهي عندها الحلقة).

إذًا ما نحتاج إليه هو إضافة القيمة الجديدة إلى القيم الموجودة داخل الوسم بالطريقة التالية

document.getElementById('demo').innerHTML = document.getElementById('demo').innerHTML + "<p>" + i + "</p>";

و الذي يكافئ

 document.getElementById('demo').innerHTML += "<p>" + i + "</p>";

 

 

var i;
var x = document.getElementById('num');

function typeWord(){
  var y = x.value;

  for( i=y; i>0; i--){
    console.log(i);
    document.getElementById('demo').innerHTML += "<p>" + i + "</p>";
  }

}

 

  • 0
نشر

يمكنك استخدام طريقة insertAdjacentHTML () لواجهة Element بتوزيع النص المحدد بتنسيق HTML أو XML وإدراج العقد الناتجة في شجرة DOM في موضع محدد. لا يقوم بإعادة توزيع العنصر الذي يتم استخدامه عليه ، وبالتالي لا يفسد العناصر الموجودة داخل هذا العنصر. هذا يتجنب الخطوة الإضافية للتسلسل ، مما يجعلها أسرع بكثير من التلاعب المباشر بالداخل.

element.insertAdjacentHTML(position, text);

position
سلسلة DOM تمثل الموضع بالنسبة للعنصر 

  • "beforebegin": قبل العنصر نفسه.
  • 'afterbegin': داخل العنصر ، قبل طفله الأول.
  • "beforeend": داخل العنصر ، بعد آخر طفل له.
  • "afterend": بعد العنصر نفسه.

text
السلسلة المراد تحليلها بتنسيق HTML أو XML وإدراجها في الشجرة.

<!-- beforebegin -->
<span id="demo">
  <!-- afterbegin -->
  foo
  <!-- beforeend -->
</span >
<!-- afterend -->
var i;
var x = document.getElementById('num');

function typeWord(){

    var y = x.value;
 
    for( i=y; i>0; i--){
        console.log(i);
        document.getElementById('demo').insertAdjacentHTML('beforeend',"<p>"+i+"</p>");
    }

}

 

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...