John
  • 21...">

    How can I select a box with specific text?

    I have this HTML:

    <h5>something</h5>
    <ul>
       <li class="name">John</li>
       <li class="age">21</li>
    </ul>
    <h5>specific text</h5>
    <ul>
       <li class="name">Peter</li>
       <li class="age">19</li>
    </ul>
    <h5>something else</h5>
    <ul>
       <li class="name">Ali</li>
       <li class="age">62</li>
    </ul>
    

    I want to highlight this part:

    <h5>specific text</h5>
    <ul>
       <li class="name">Peter</li>
       <li class="age">19</li>
    </ul>
    

    Logic is the content of a tag <h5>. I want him to be specific text. In fact, the expected result is an array of both this name and age. Something like this: var res = ['Peter', 19];.

    But my code selects all those <ul>s:

    $('ul').map(function (){
       var res = [$(this).find('li.name').text(), $(this).find('li.age').text()];
    });
    

    How can i fix this?

    +4
    source share
    2 answers

    You can use :contains()to find H5which contains the desired string. Then use .next()to get ulassociated withH5

    $("h5:contains('specific text')").next('ul').map(function (){
       var res = [$(this).find('li.name').text(), $(this).find('li.age').text()];
       console.log(res)
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <h5>something</h5>
    <ul>
       <li class="name">John</li>
       <li class="age">21</li>
    </ul>
    <h5>specific text</h5>
    <ul>
       <li class="name">Peter</li>
       <li class="age">19</li>
    </ul>
    <h5>something else</h5>
    <ul>
       <li class="name">Ali</li>
       <li class="age">62</li>
    </ul>
    Run codeHide result
    +7
    source

    Jquery script to get data from ul list:

    $('ul').map(function (){
       var res = [$(this).find('li.name').text(), $(this).find('li.age').text()];
      // console.log(res);
       
    });
    var htmVal = '';
    $('h5').each(function(index){
    htmVal = $(this).html();
    if(htmVal == 'something else'){
    var detail ={name:$(this).next().find('li.name').html(),age:$(this).next().find('li.age').html()};
    console.log(detail);
    }
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <h5>something</h5>
    <ul>
       <li class="name">John</li>
       <li class="age">21</li>
    </ul>
    <h5>specific text</h5>
    <ul>
       <li class="name">Peter</li>
       <li class="age">19</li>
    </ul>
    <h5>something else</h5>
    <ul>
       <li class="name">Ali</li>
       <li class="age">62</li>
    </ul>
    Run codeHide result
    0

    Source: https://habr.com/ru/post/1676647/


    All Articles