'Select the last element that is not empty (innerText !== "") of a class with querrySelector
I'm try to select the last element that is not empty of a class.
For exemple, here I'would like to select the second element :
<span class="test">A</span>
<span class="test">B</span>
<span class="test"></span>
<span class="test"></span>
But because the innerText changes (with the actions of the user), I can't just use
document.querySelector(".test:nth-of-type(2)");
I've tried this but it doesn't work :
document.querySelector('.test:not(:empty):nth-last-of-type(1)');
function myFunction(){
document.querySelector('.test:not(:empty):nth-last-of-type(1)').innerText = "test";
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="test">A</span><br>
<span class="test">B</span><br>
<span class="test"></span><br>
<span class="test"></span><br>
<input type="button" value="change 2nd element" onclick="myFunction()"/>
Solution 1:[1]
Why use querySelector for this? I would suggest this:
document
.querySelectorAll('.test') // all with test class
.filter(elem => elem.innerText !== '') // only not empty
.at(-1) // last element
// or, if you need backward browser compatibility:
document
.querySelectorAll('.test') // all with test class
.filter(elem => elem.innerText !== '') // only not empty
.reverse()[0]
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
