2016-07-08 1 views
-2

J'essaye de finir avec le html <div id="animal"> Dog Cat Horse </div> mais je ne peux pas comprendre comment combiner plusieurs éléments de tableau dans un innerHTML. J'essaie quelque chose comme ceci:Définir innerHTML d'un div à = plusieurs éléments de tableau en utilisant getElementById

var myArray = [ 
 
    ['Dog', 'Terrier'], 
 
    ['Cat', 'Tabby'], 
 
    ['Horse', 'Shetland'], 
 
]; 
 

 
for (i = 0; i < myArray.length; i++) { 
 
    document.getElementById('animal').innerHTML = locations[i][0]; 
 
};
<div id="animal"> animal names here </div>

+0

Typo: 'locations' ->' myArray'. De plus, utilisez '+ =' pour ajouter, car '= 'écrasera, et utilisera' textContent' au lieu de 'innerHTML' s'il ne s'agit pas de HTML. – Siguza

+0

vous pouvez parcourir votre tableau et affecter tous les éléments à une chaîne, puis l'affecter à l'innerHTML – ElenaDBA

+1

@Seth Soyez prudent avec les modifications de code. Vous pourriez avoir édité le problème de base de la question. – Siguza

Répondre

2

Vous remplaçons le contenu de votre div à chaque itération dans la boucle.

Idéal serait de créer une chaîne de vos données et l'ajouter dans votre div. Au lieu d'accéder au dom à chaque itération

var myArray = [ 
 
    ['Dog', 'Terrier'], 
 
    ['Cat', 'Tabby'], 
 
    ['Horse', 'Shetland'], 
 
]; 
 
var data = ""; 
 
for (i = 0; i < myArray.length; i++) { 
 
    data += " " + myArray[i][0]; 
 
}; 
 

 
document.getElementById('animal').innerHTML = data;
<div id="animal"> animal names here </div>

+0

Parfait, merci. – user2015431

-1

Lorsque vous utilisez innerHTML =, il remplace tout le code HTML dans un élément. Vous devez utiliser += aussi ajouter au HTML interne.

for (i = 0; i < myArray.length; i++) { 
    document.getElementById('animal').innerHTML+= ' ' + myArray[i][0]; 
} 
-1
var myArray = [ 
    [ 'Dog' , 'Terrier'], 
    [ 'Cat' , 'Tabby' ], 
    [ 'Horse' , 'Shetland'], 
]; 

for (i = 0; i < myArray.length; i++) { 
    document.getElementById('animal').innerHTML += " " + myArray[i][0] ; 
}; 

link ici

1

Vous écrasez actuellement le contenu de #animal à chaque itération, de sorte que le dernier élément est affiché. Vous devez concaténer innerHTML de #animal pour que les nouveaux éléments soient ajoutés au code HTML existant. Notez également que vous pouvez ajouter du code HTML supplémentaire, par exemple un tag <br/>, afin de diviser les lignes pour plus de lisibilité.

var myArray = [ 
 
    ['Dog', 'Terrier'], 
 
    ['Cat', 'Tabby'], 
 
    ['Horse', 'Shetland'], 
 
]; 
 

 
for (i = 0; i < myArray.length; i++) { 
 
    document.getElementById('animal').innerHTML += myArray[i][0] + "</br>"; 
 
};
<div id="animal"></div>

Enfin, le balisage pour produire vos animaux ressemble à un emploi pour une liste ordonnée/non ordonnée. De plus comme @kb a souligné, il est préférable d'adopter une approche plus moderne et idiomatiques et utiliser .map et comme @ gcampbell souligné, insertAdjacentHTML est plus rapide que innerHTML

var animals = [ 
 
    ['Dog', 'Terrier'], 
 
    ['Cat', 'Tabby'], 
 
    ['Horse', 'Shetland'], 
 
]; 
 

 

 
var animalNames = animals.map(function(animal) { 
 
    return "<li>" + animal[0] + "</li>"; 
 
    }) 
 
    .join(""); 
 

 
document.getElementById('animal').insertAdjacentHTML('beforebegin', animalNames);
<h3>Animals:</h3> 
 
<ul id="animal"></ul>

+0

Est-ce que la scène Javascript s'est tellement éloignée de ses racines de programmation que personne ne maîtrise plus les fondations comme '.map()'?Chaque réponse dans ce fil se fonde sur la mise en boucle d'un tableau sans raison apparente. C'est un peu décourageant. –

+0

Je suis d'accord avec vous et ne jamais utiliser pour les boucles, personnellement. Mais la raison pour laquelle vous les voyez dans les réponses est de répondre à la question du PO avec * leur * code. Peut-être qu'ils prennent en charge les navigateurs hérités et ne veulent pas l'overhead d'un polyfill pour 'Array.prototype.map' et d'autres méthodes énumérables. Sans oublier que les fondations sont construites sur des boucles for/while. Découvrez le polyfill pour '.map'. Il est également intéressant de souligner qu'une boucle for est complètement acceptable et parfois même nécessaire. Dans ce cas, il existe des alternatives, mais ce n'est pas la racine du problème OP. – Seth

+0

Mise à jour de la deuxième option pour utiliser la carte ... rien que pour vous;) – Seth

-2

Vous pouvez utiliser le tableau de conversion de chaîne

document.getElementById('animal').innerHTML = myArray.toString().replace(",", " ") 

fiddle

-2

essayer quelque chose comme ça:

var myArray = [ 
[ 'Dog' , 'Terrier'], 
[ 'Cat' , 'Tabby' ], 
[ 'Horse' , 'Shetland'], 
]; 

var myStr; 

mtStr ="" 

for (i = 0; i < myArray.length-1; i++) { 
    myStr += myArray[i]; 
} 

document.getElementById('animal').innerHTML= myStr;