• My textWhat I want...">

    Wrap some text in jQuery

    What I have:

    <ul id="myId">
        <li>
            My text
            <ul class="myClass">
                <li>blahblahblah</li>
            </ul>
        </li>
    </ul>
    

    What I want:

    <ul id="myId">
        <li>
            <span>My text</span>
            <ul class="myClass">
                <li>blahblahblah</li>
            </ul>
        </li>
    </ul>
    

    I don't have access to the HTML markup, and I want to do it using jQuery, Something like:

    $('.myClass').get_the_text_ubove().wrap('<span>');
    

    There must be some way to select "My text", although it does not have a class / id

    +5
    source share
    3 answers

    Try:

    $('#myId > li').each(
        function(){
            $(this.firstChild).wrap('<span></span>');
        });
    

    JS Fiddle demo .

    Regarding the addition classto ul:

    $('#myId > li').each(
        function(){
            $(this.firstChild).wrap('<span></span>');
            $(this).find('ul').addClass('myClass');
        });
    

    JS Fiddle demo .

    +4
    source
    $($('#myId ul').addClass('myClass')[0].previousSibling).wrap('<span>');
    

    JSFIDDLE DEMO

    +6
    source
    var ul = document.getElementById("myId");
    var li = ul.firstElementChild;
    var text = li.firstChild;
    var ul = li.childNodes[1];
    ul.classList.add('myClass');
    var span = document.createElement("span");
    span.textContent = text.data;
    li.replaceChild(span, text);
    

    Old fashioned DOM to the rescue.

    +3
    source

    All Articles