I've built a script that creates a new 'gridItem' object instance for each grid item. The problem is, every new grid item doesn't declare a new variable but instead overwrites the 'obj' variable. I'd rather declare a new variable for each object instance, such as obj1, obj2, etc.
I've tried to do this by using a counting variable as follows:
obj + 'id' = new gridItem(title, id); // hoped for obj1, obj2, etc
But this fails. Does anyone know how to do this, and the best way of doing so? Thanks for any help here.
Codepen: https://codepen.io/anon/pen/ebKXGQ
let gridItems = document.querySelectorAll('.grid-item'), id = 0, objects = [];
for (let item of gridItems) {
id++;
var title = item.querySelector('.grid-text-content h2').textContent,
obj = new gridItem(title, id);
objects.push(obj);
}
function gridItem(title, id) {
this.title = title;
this.id = id;
}
document.getElementsByTagName('p')[0].textContent = 'obj variable: ' + JSON.stringify(obj, null) + ' - I want to be able to use obj1, obj2, obj3 and obj4';
/* Grid Test */
.grid-nick {
display: grid;
grid-template-columns: repeat(4,1fr);
width: 100%;
grid-column-gap: 2%;
background: lightblue;
}
.grid-item, .grid-text-content {
background: yellow;
display: flex;
flex-direction: column;
align-items: center;
font-size: 1em;
}
.grid-text-content {
padding: 10px;
}
.grid-item img { width: 100% }
.grid-item h2 {
margin-bottom: 0;
}
.grid-item .grid-text.price {
padding: 20px 0;
font-size: 2em;
}
.grid-item .grid-text .description {}
.grid-item .grid-btn {}
<div class='grid-nick'>
<div class='grid-item'>
<img src='http://www.krugerpark.co.za/images/1-lion-charge-gc590a.jpg'>
<div class='grid-text-content'>
<h2>Header Here</h2>
<span class='grid-text price'>$81.52</span>
<span class='grid-text description'>Some text about the jeans. Super slim and comfy lorem ipsum lorem jeansum. Lorem jeamsun denim lorem jeansum.</span>
<button class='grid-btn cart'>Add to Cart</button>
</div>
</div>
<div class='grid-item'>
<img src='http://www.krugerpark.co.za/images/1-lion-charge-gc590a.jpg'>
<div class='grid-text-content'>
<h2>Another Header Here</h2>
<span class='grid-text price'>$81.52</span>
<span class='grid-text description'>Some text about the jeans. Super slim and comfy lorem ipsum lorem jeansum. Lorem jeamsun denim lorem jeansum.</span>
<button class='grid-btn cart'>Add to Cart</button>
</div>
</div>
<div class='grid-item'>
<img src='http://www.krugerpark.co.za/images/1-lion-charge-gc590a.jpg'>
<div class='grid-text-content'>
<h2>And This Here</h2>
<span class='grid-text price'>$81.52</span>
<span class='grid-text description'>Some text about the jeans. Super slim and comfy lorem ipsum lorem jeansum. Lorem jeamsun denim lorem jeansum.</span>
<button class='grid-btn cart'>Add to Cart</button>
</div>
</div>
<div class='grid-item'>
<img src='http://www.krugerpark.co.za/images/1-lion-charge-gc590a.jpg'>
<div class='grid-text-content'>
<h2>Last Header</h2>
<span class='grid-text price'>$81.52</span>
<span class='grid-text description'>Some text about the jeans. Super slim and comfy lorem ipsum lorem jeansum. Lorem jeamsun denim lorem jeansum.</span>
<button class='grid-btn cart'>Add to Cart</button>
</div>
</div>
</div>
<p>changes</p>