Reputation:
My example code:
<!DOCTYPE html>
<html>
<body>
<div class="names">
<i>Name 1.</i>
</div>
<div class="names">
<i>Name 2.</i>
</div>
<div class="names">
<i>Name 3.</i>
</div>
<input type="button" value="Change all names" onclick="changeNames()" />
<script>
var changeNames = function() {
var names = document.getElementsByClassName('names');
for (var i = 0; i < names.length; i++) {
names.item(i).textContent = names.item(i).textContent + ' Changed...'
}
}
</script>
</body>
</html>
My question is : How to get <i>
tag inside the class name?
names.item(i).textContent
doesn't include <i>
tag.
I've tried this but it's not working: names.item(i).find('i').textContent
And names.item(i)
doesn't support .innerHTML
, too.
Upvotes: 1
Views: 1566
Reputation: 115222
Use Element.querySelector()
to get i
tag inside div.
var changeNames = function() {
var names = document.getElementsByClassName('names');
for (var i = 0; i < names.length; i++) {
names.item(i).querySelector('i').textContent += ' Changed...'
// or
// names[i].querySelector('i').textContent += ' Changed...'
}
}
<div class="names">
<i>Name 1.</i>
</div>
<div class="names">
<i>Name 2.</i>
</div>
<div class="names">
<i>Name 3.</i>
</div>
<input type="button" value="Change all names" onclick="changeNames()" />
Upvotes: 2
Reputation: 388316
Because that is the html content so use innerHTML
var changeNames = function() {
var names = document.getElementsByClassName('names');
for (var i = 0; i < names.length; i++) {
names[i].innerHTML += ' Changed...';
//another approach is to add a text node than to modify the html content like
//names[i].appendChild(document.createTextNode(' Changed...'))
}
}
<div class="names">
<i>Name 1.</i>
</div>
<div class="names">
<i>Name 2.</i>
</div>
<div class="names">
<i>Name 3.</i>
</div>
<input type="button" value="Change all names" onclick="changeNames()" />
Upvotes: 0