2013-08-09 2 views
1

Я студент, и я пишу JavaScript для цикла, который печатает на innerHTML. Каждая конкатенация строки добавляется к последней, за которой следует запятая. как это сделать, чтобы запятая не была напечатана после последней итерации? Просто для разума, запятые не являются частью задания, я просто пытаюсь добавить практическое применение. нет jQuery tho pleaseLoop для печати итераций, разделенных запятой, без запятой в конце

window.onload = function(){ 
    var mySeven = 0; 
    var printSeven = document.getElementById('multiples_seven'); 

    for (i=1; i <= 1000; i++){ 
     if (i % 7 == 0){ 
     mySeven += i; 
     printSeven.innerHTML += i + ',' + ' '; 
     } 
    } 
}; 

Спасибо!

+2

Подумайте об этом логически. Как вы знаете, когда вы находитесь на последнем элементе (подсказка: 'i') – FakeRainBrigand

+5

Обычно вы просто используете [' join'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/join) в массиве ... – Bergi

+0

@ Джонатан, очень приятно вас познакомить с учеником http://www.w3fools.com/! – naveen

ответ

5

Вместо этого вы должны использовать join(). Это намного чище, и вам не нужно беспокоиться о крайних случаях:

var printSeven = document.getElementById('multiples_seven'); 
    var sevens = []; 
    for (i=1; i <= 1000; i++){ 
     if (i % 7 == 0){ 
     sevens.push(i); 
     } 
    } 
    printSeven.innerText = sevens.join(", "); 

или подход, который избегает if() заявления и ненужных повторений:

var printSeven = document.getElementById('multiples_seven'); 
    var sevens = []; 
    for (i = 7; i <= 1000; i += 7){ 
    sevens.push(i); 
    } 
    printSeven.innerText = sevens.join(", "); 

И ради понимания, вот как вы могли бы сделать это без join():

var printSeven = document.getElementById('multiples_seven'); 
    var maxValue = 1000; 
    var list = ""; 

    for (i = 7; i <= maxValue; i += 7){ 
    list += i; 
    if(i + 7 <= maxValue){ 
     list += ", "; 
    } 
    } 
    printSeven.innerText = list; 
1

Используйте эту функцию:

function reorderData(){ 
    var sevens = Array(); 
    var printSeven = document.getElementById('multiples_seven'); 
    for (i=1; i <= 1000; i++){ 
    if (i % 7 == 0){ 
     sevens.push(i); 
    } 
    } 
    var newDisplaySelectedArray = sevens.join(","); 
    jQuery("#multiples_seven").val(newDisplaySelectedArray); 
} 
0

Прежде всего, лучше не манипулировать DOM внутри цикла. Вы должны построить свой вывод в виде строки или массива затем добавить его в DOM в одной операции:

window.onload = function() { 
    var mySeven = ''; 
    var printSeven = document.getElementById('multiples_seven'); 

    for (i=1; i <= 1000; i++){ 
     if (i % 7 == 0){ 
     mySeven += i + ', '; 
     } 
    } 
    printSeven.innerHTML += mySeven; 
}; 

Чтобы удалить Запятая у вас есть два варианта: не добавить его в первую очередь или удалить его перед добавлением его в DOM.

Большинство других ответов сконцентрировались на не добавляя его, вот решение, которое удаляет его:

window.onload = function() { 
    var mySeven = ''; 
    var printSeven = document.getElementById('multiples_seven'); 

    for (i=1; i <= 1000; i++){ 
     if (i % 7 == 0){ 
     mySeven += i + ', '; 
     } 
    } 
    printSeven.innerHTML += mySeven.slice (0, -2); 
}; 

Слово предостережения, если ваш цикл не выполняет, по меньшей мере одну итерацию можно удалить символы, хотите отобразить. В общем случае проще построить массив и использовать функцию join, как показано в других ответах здесь.

0

легче проверить, если вы на первом пункте, чем если бы вы в последний, так просто добавьте запятые перед номером:

window.onload = function(){ 
    var mySeven = 0; 
    var printSeven = ''; 

    for (i = 1; i <= 1000; i++) { 
    if (i % 7 == 0){ 
     mySeven += i; 
     printSeven += (printSeven.length > 0 ? ', ' : '') + i; 
    } 
    } 

    document.getElementById('multiples_seven') += printSeven; 
}; 
Смежные вопросы