Search code examples
javascriptchildrennodevaluechild-nodes

How to get the text from a div which has children in it


I am currently studying JavaScript and I have the following problem. Is it possible to get only the text from a div which has children inside it? I managed to make it work only for the text which appears before the div's children.

PS: I would like to mention that I am trying to achieve this using only pure JavaScript.

var Class = document.querySelectorAll('div,b');
for (var i=0; i < Class.length; i++){
   console.log(Class[i].childNodes[0].nodeValue);
}
<div class="Bio">
My name is <b>John Doe</b> and I am coming from Texas
</div>

<div class="Bio">
My name is <b>Jean Frye</b> and I am coming from Alabama
</div>


Solution

  • It's not very clean way, but try something like this :

    //get all div's with Bio css class (You can change it)
    var Class = document.querySelectorAll('.Bio');
    var sp=document.getElementById('res');
    var arr=[]; //I put result into array so You can use it where You need
    for (var i=0; i < Class.length; i++) {
       for(var x=0;x<Class[i].childNodes.length;x++) {
         if(Class[i].childNodes[x].nodeValue==null) {
            //get value, innerHTML, from <b>
       			//res.innerHTML+=Class[i].childNodes[x].innerHTML+'<br>';
            arr.push(Class[i].childNodes[x].innerHTML);
            } else {
            //get div innerHTML (before,after every child node
            //res.innerHTML+=Class[i].childNodes[x].nodeValue+'<br>';
            arr.push(Class[i].childNodes[x].nodeValue);
            }
       }
    }
    //show result into that span
    for(var i=0;i<arr.length;i++) {
    res.innerHTML+=arr[i]+'<br>';
    }
    <div class="Bio">
    My name is <b>John Doe</b> and I am coming from Texas
    </div>
    
    <div class="Bio">
    My name is <b>Jean Frye</b> and I am coming from Alabama
    </div>
    <br><br>
    <!-- I use this span to show result -->
    <span id="res"></span>