I’m currently trying to insert text content that change depending of image validation using a single class for multiple divs. Any help is appreciate!
HTML
JavaScript
x
8
1
2
<div id="trophies"><img id="trophyimage" src="//user/trophies/A.png" height="100" width="100">
3
<span id="text-content" class="spaner"></span></div>
4
<div id="trophies"><img id="trophyimage" src="//user/trophies/B.png" height="100" width="100">
5
<span id="text-content" class="spaner"></span></div>
6
<div id="trophies"><img id="trophyimage" src="//user/trophies/C.png" height="100" width="100">
7
<span id="text-content" class="spaner"></span></div>
8
Right now using the next Javascript it’s inserting the text content but it only does it once per “.spanner” class, not in the rest.
JavaScript
JavaScript
1
13
13
1
var trophy = document.getElementById("trophyimage");
2
if(trophy.src == "...//user/trophies/A.png"){
3
var x = document.getElementsByClassName("spaner")[0];
4
x.textContent = "Trophy A";
5
}
6
else if (trophy.src == "...//user/trophies/B.png"){
7
var x = document.getElementsByClassName("spaner")[0];
8
x.textContent = "Trophy B";
9
}
10
else{ var x = document.getElementsByClassName("spaner");
11
x.textContent = "Null";
12
}
13
I’m trying to figure out how to make it work using something like this:
JavaScript
JavaScript
1
16
16
1
var trophiestext = Array.from(document.querySelectorAll("spaner"));
2
trophiestext.forEach(function(troph) {
3
var trophy = document.getElementById("trophyimage");
4
if(trophy.src == "...//user/trophies/A.png"){
5
var x = document.getElementsByClassName("spaner");
6
x.textContent = "Trophy A";
7
}
8
else if (trophy.src == "...//user/trophies/B.png"){
9
var x = document.getElementsByClassName("spaner");
10
x.textContent = "Trophy B";
11
}
12
else{ var x = document.getElementsByClassName("spaner");
13
x.textContent = "Null";
14
}
15
}
16
Thanks in advance!
Advertisement
Answer
First off, there is a problem, multiple HTML elements cannot share the same id attribute, you must switch them for classes, also “//user/trophies/A.png” is probably not a valid directory
HTML:
JavaScript
1
13
13
1
<div class="trophies">
2
<img class="trophyimage" src="../user/trophies/A.png" height="100" width="100">
3
<span class="text-content spanner"></span>
4
</div>
5
<div class="trophies">
6
<img class="trophyimage" src="../user/trophies/B.png" height="100" width="100">
7
<span class="text-content spanner"></span>
8
</div>
9
<div class="trophies">
10
<img class="trophyimage" src="../user/trophies/C.png" height="100" width="100">
11
<span class="text-content spanner"></span>
12
</div>
13
Now, JavaScript can handle your HTML much better
Javascript:
JavaScript
1
14
14
1
// Don't forget the dot before the word trophies
2
const trophies = document.querySelectorAll('.trophies')
3
4
trophies.forEach(element => {
5
const img = element.querySelector('.trophyimage')
6
const src = img.getAttribute('src')
7
const span = element.querySelector('.spanner')
8
9
// change for the src to fit your files
10
if (src === '../user/trophies/A.png') span.innerText = 'Trophy A'
11
else if (src === '../user/trophies/B.png') span.innerText = 'Trophy B'
12
else span.innerText = 'Null' // Actually writes the word null, for no text use empty quotes
13
})
14
If you need more help, just reply to this answer 🙂