JSFiddle - React, Tailwind, and code Playground

JavaScript

var haystack = '  <span class="no-text"></span><span class="some-class"><span class="other-class">This is my spanned string</span></span>';
    var needle = 'span';
    
    var elt = document.createElement('elt');
    elt.innerHTML = haystack;
    
    var iter = document.evaluate('.//text()[contains(., "' + needle + '")]', elt).iterateNext();
    
    if (iter) {
        var position = iter.textContent.indexOf(needle);
        var range = document.createRange();
        range.setStart(iter, position);
        range.setEnd(iter, position + needle.length);
        // At this point, range points at the first occurence of `needle`
        // in `haystack`. You can now delete it, replace it with something
        // else, and so on.
        console.log(range);
    }