What do querySelectorAll, getElementsByClassName and other getElementsBy* methods return?












94














Do getElementsByClassName (and similar functions like getElementsByTagName and querySelectorAll) work the same as getElementById or do they return an array of elements?



The reason I ask is because I am trying to change the style of all elements using getElementsByClassName. See below.



//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';

//works
document.getElementById('myIdElement').style.size = '100px';









share|improve this question




















  • 30




    The clue is, very much, in the name: getElementsByClassName() implies a plural, whereas getElementById() implies a singular element item.
    – David Thomas
    May 21 '12 at 23:20






  • 1




    I get that, it just didn't make sense to me that you can't change all the elements with that class name using the code above instead of having to loop through an array. jquery way is much better, i was just curious about the js way
    – dmo
    May 22 '12 at 4:34






  • 1




    Might be useful too: stackoverflow.com/questions/3871547/…
    – kapa
    Jul 31 '14 at 9:19


















94














Do getElementsByClassName (and similar functions like getElementsByTagName and querySelectorAll) work the same as getElementById or do they return an array of elements?



The reason I ask is because I am trying to change the style of all elements using getElementsByClassName. See below.



//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';

//works
document.getElementById('myIdElement').style.size = '100px';









share|improve this question




















  • 30




    The clue is, very much, in the name: getElementsByClassName() implies a plural, whereas getElementById() implies a singular element item.
    – David Thomas
    May 21 '12 at 23:20






  • 1




    I get that, it just didn't make sense to me that you can't change all the elements with that class name using the code above instead of having to loop through an array. jquery way is much better, i was just curious about the js way
    – dmo
    May 22 '12 at 4:34






  • 1




    Might be useful too: stackoverflow.com/questions/3871547/…
    – kapa
    Jul 31 '14 at 9:19
















94












94








94


33





Do getElementsByClassName (and similar functions like getElementsByTagName and querySelectorAll) work the same as getElementById or do they return an array of elements?



The reason I ask is because I am trying to change the style of all elements using getElementsByClassName. See below.



//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';

//works
document.getElementById('myIdElement').style.size = '100px';









share|improve this question















Do getElementsByClassName (and similar functions like getElementsByTagName and querySelectorAll) work the same as getElementById or do they return an array of elements?



The reason I ask is because I am trying to change the style of all elements using getElementsByClassName. See below.



//doesn't work
document.getElementsByClassName('myElement').style.size = '100px';

//works
document.getElementById('myIdElement').style.size = '100px';






javascript getelementsbyclassname dom-traversal






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 22 '17 at 16:26









Taryn

188k45286351




188k45286351










asked May 21 '12 at 23:17









dmo

1,99421420




1,99421420








  • 30




    The clue is, very much, in the name: getElementsByClassName() implies a plural, whereas getElementById() implies a singular element item.
    – David Thomas
    May 21 '12 at 23:20






  • 1




    I get that, it just didn't make sense to me that you can't change all the elements with that class name using the code above instead of having to loop through an array. jquery way is much better, i was just curious about the js way
    – dmo
    May 22 '12 at 4:34






  • 1




    Might be useful too: stackoverflow.com/questions/3871547/…
    – kapa
    Jul 31 '14 at 9:19
















  • 30




    The clue is, very much, in the name: getElementsByClassName() implies a plural, whereas getElementById() implies a singular element item.
    – David Thomas
    May 21 '12 at 23:20






  • 1




    I get that, it just didn't make sense to me that you can't change all the elements with that class name using the code above instead of having to loop through an array. jquery way is much better, i was just curious about the js way
    – dmo
    May 22 '12 at 4:34






  • 1




    Might be useful too: stackoverflow.com/questions/3871547/…
    – kapa
    Jul 31 '14 at 9:19










30




30




The clue is, very much, in the name: getElementsByClassName() implies a plural, whereas getElementById() implies a singular element item.
– David Thomas
May 21 '12 at 23:20




The clue is, very much, in the name: getElementsByClassName() implies a plural, whereas getElementById() implies a singular element item.
– David Thomas
May 21 '12 at 23:20




1




1




I get that, it just didn't make sense to me that you can't change all the elements with that class name using the code above instead of having to loop through an array. jquery way is much better, i was just curious about the js way
– dmo
May 22 '12 at 4:34




I get that, it just didn't make sense to me that you can't change all the elements with that class name using the code above instead of having to loop through an array. jquery way is much better, i was just curious about the js way
– dmo
May 22 '12 at 4:34




1




1




Might be useful too: stackoverflow.com/questions/3871547/…
– kapa
Jul 31 '14 at 9:19






Might be useful too: stackoverflow.com/questions/3871547/…
– kapa
Jul 31 '14 at 9:19














9 Answers
9






active

oldest

votes


















116














Your getElementById() code works since IDs have to be unique and thus the function always returns exactly one element (or null if none was found).



However, getElementsByClassName(), querySelectorAll(), and other getElementsBy* methods return an array-like collection of elements. Iterate over it like you would with a real array:



var elems = document.getElementsByClassName('myElement');
for(var i = 0; i < elems.length; i++) {
elems[i].style.size = '100px';
}


If you prefer something shorter, consider using jQuery:



$('.myElement').css('size', '100px');





share|improve this answer



















  • 1




    Does that also apply to <iframe> which is also part of your domain
    – JMASTER B
    Sep 1 '16 at 1:25












  • It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
    – user2437417
    Apr 26 at 20:40





















8














You are using a array as an object, the difference between getElementbyId and
getElementsByClassName is that:





  • getElementbyId will return you an object.


  • getElementsByClassName will return you an array.


getElementsByClassName




The getElementsByClassName(classNames) method takes a string that
contains an unordered set of unique space-separated tokens
representing classes. When called, the method must return a live
NodeList object containing all the elements in the document that
have all the classes specified in that argument, having obtained the
classes by splitting a string on spaces. If there are no tokens
specified in the argument, then the method must return an empty
NodeList.




https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname



getElementById




The getElementById() method accesses the first element with the specified id.




http://www.w3schools.com/jsref/met_doc_getelementbyid.asp



in your code the lines:




1- document.getElementsByClassName('myElement').style.size = '100px';




will NOT work as expected, cos the getElementByClassName will return an array, and the array will NOT have the style property, you gonna access each element by iterating them.



That's why the function getElementById was working for you, this function will return you the direct object , and so you will be able to access the style property.






share|improve this answer





























    7














    The following description is taken from this page:




    The getElementsByClassName() method returns a collection of all elements in the document with the specified class name, as a NodeList object.



    The NodeList object represents a collection of nodes. The nodes can be
    accessed by index numbers. The index starts at 0.



    Tip: You can use the length property of the NodeList object to determine the number of elements with a specified class name, then you can loop through all elements and extract the info you want.




    So, as a parameter getElementsByClassName would accept a class name.



    If this is your HTML body:



    <div id="first" class="menuItem"></div>
    <div id="second" class="menuItem"></div>
    <div id="third" class="menuItem"></div>
    <div id="footer"></div>


    then var menuItems = document.getElementsByClassName('menuItem') would return a collection (not an array) of the 3 upper <div>s, as they match the given class name.



    You can then iterate over this nodes (<div>s in this case) collection with:



    for (var menuItemIndex = 0 ; menuItems.length ; menuItemIndex ++) {
    var currentMenuItem = menuItems[menuItemIndex];
    // do stuff with currentMenuItem as a node.
    }


    Please refer to this post for more on differences between elements and nodes.






    share|improve this answer































      4














      ES6 provides Array.from() method, which creates a new Array instance from an array-like or iterable object.






      let boxes = document.getElementsByClassName('box');

      Array.from(boxes).forEach(v => v.style.background = 'green');
      console.log(Array.from(boxes));

      .box {
      width: 50px;
      height: 50px;
      margin: 5px;
      background: blue;
      display: inline-block;
      }

      <div class='box'></div>
      <div class='box'></div>
      <div class='box'></div>
      <div class='box'></div>





      As you can see inside the code snippet, after using Array.from() function you are then able to manipulate over each element.





      The same solution using jQuery.






      $('.box').css({'background':'green'});

      .box {
      width: 50px;
      height: 50px;
      margin: 5px;
      background: blue;
      display: inline-block;
      }

      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <div class='box'></div>
      <div class='box'></div>
      <div class='box'></div>
      <div class='box'></div>








      share|improve this answer































        3














        In Other Words




        • document.querySelector() selects only the first one element of the specified selector. So it doesn't spit out an array, it's a single value. Similar to document.getElementById() which fetches ID-elements only, since IDs have to be unique.


        • document.querySelectorAll() selects all elements with the specified selector and returns them in an array. Similar to document.getElementsByClassName() for classes and document.getElementsByTagName() tags only.






        Why use querySelector?



        It's used merely for the sole purpose of ease and brevity.






        Why use getElement/sBy?*



        Faster performance.






        Why this performance difference?



        Both ways of selection has the purpose of creating a NodeList for further use.
        querySelectors generates a static NodeList with the selectors thus it must be first created from scratch.
        getElement/sBy* immediately adapts the existing live NodeList of the current DOM.



        So, when to use which method it's up to you/your project/your device.






        Infos



        Demo of all methods
        NodeList Documentation
        Performance Test






        share|improve this answer































          2














          It returns Array-like list.



          You make that an Array as example



          var el = getElementsByClassName("elem");
          el = Array.prototype.slice.call(el); //this line
          el[0].appendChild(otherElem);





          share|improve this answer





























            2














            You could get a single element by running



            document.querySelector('.myElement').style.size = '100px';


            but it's going to work for the first element with class .myElement.



            If you would like apply this for all elements with the class I suggest you to use



            document.querySelectorAll('.myElement').forEach(function(element) {
            element.style.size = '100px';
            });





            share|improve this answer































              2














              /*
              * To hide all elements with the same class,
              * use looping to reach each element with that class.
              * In this case, looping is done recursively
              */

              const hideAll = (className, i=0) => {
              if(!document.getElementsByClassName(className)[i]){ //exits the loop when element of that id does not exist
              return;
              }

              document.getElementsByClassName(className)[i].style.visibility = 'hidden'; //hide element
              return hideAll(className, i+1) //loop for the next element
              }

              hideAll('appBanner') //the function call requires the class name





              share|improve this answer





























                -1














                With ES5+ (any browsed nowadays - 2017) you should be able to do






                .forEach.call(document.getElementsByClassName('answer'), function(el) {
                el.style.color= 'red';
                });








                share|improve this answer























                  Your Answer






                  StackExchange.ifUsing("editor", function () {
                  StackExchange.using("externalEditor", function () {
                  StackExchange.using("snippets", function () {
                  StackExchange.snippets.init();
                  });
                  });
                  }, "code-snippets");

                  StackExchange.ready(function() {
                  var channelOptions = {
                  tags: "".split(" "),
                  id: "1"
                  };
                  initTagRenderer("".split(" "), "".split(" "), channelOptions);

                  StackExchange.using("externalEditor", function() {
                  // Have to fire editor after snippets, if snippets enabled
                  if (StackExchange.settings.snippets.snippetsEnabled) {
                  StackExchange.using("snippets", function() {
                  createEditor();
                  });
                  }
                  else {
                  createEditor();
                  }
                  });

                  function createEditor() {
                  StackExchange.prepareEditor({
                  heartbeatType: 'answer',
                  autoActivateHeartbeat: false,
                  convertImagesToLinks: true,
                  noModals: true,
                  showLowRepImageUploadWarning: true,
                  reputationToPostImages: 10,
                  bindNavPrevention: true,
                  postfix: "",
                  imageUploader: {
                  brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                  contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                  allowUrls: true
                  },
                  onDemand: true,
                  discardSelector: ".discard-answer"
                  ,immediatelyShowMarkdownHelp:true
                  });


                  }
                  });














                  draft saved

                  draft discarded


















                  StackExchange.ready(
                  function () {
                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f10693845%2fwhat-do-queryselectorall-getelementsbyclassname-and-other-getelementsby-method%23new-answer', 'question_page');
                  }
                  );

                  Post as a guest















                  Required, but never shown

























                  9 Answers
                  9






                  active

                  oldest

                  votes








                  9 Answers
                  9






                  active

                  oldest

                  votes









                  active

                  oldest

                  votes






                  active

                  oldest

                  votes









                  116














                  Your getElementById() code works since IDs have to be unique and thus the function always returns exactly one element (or null if none was found).



                  However, getElementsByClassName(), querySelectorAll(), and other getElementsBy* methods return an array-like collection of elements. Iterate over it like you would with a real array:



                  var elems = document.getElementsByClassName('myElement');
                  for(var i = 0; i < elems.length; i++) {
                  elems[i].style.size = '100px';
                  }


                  If you prefer something shorter, consider using jQuery:



                  $('.myElement').css('size', '100px');





                  share|improve this answer



















                  • 1




                    Does that also apply to <iframe> which is also part of your domain
                    – JMASTER B
                    Sep 1 '16 at 1:25












                  • It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
                    – user2437417
                    Apr 26 at 20:40


















                  116














                  Your getElementById() code works since IDs have to be unique and thus the function always returns exactly one element (or null if none was found).



                  However, getElementsByClassName(), querySelectorAll(), and other getElementsBy* methods return an array-like collection of elements. Iterate over it like you would with a real array:



                  var elems = document.getElementsByClassName('myElement');
                  for(var i = 0; i < elems.length; i++) {
                  elems[i].style.size = '100px';
                  }


                  If you prefer something shorter, consider using jQuery:



                  $('.myElement').css('size', '100px');





                  share|improve this answer



















                  • 1




                    Does that also apply to <iframe> which is also part of your domain
                    – JMASTER B
                    Sep 1 '16 at 1:25












                  • It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
                    – user2437417
                    Apr 26 at 20:40
















                  116












                  116








                  116






                  Your getElementById() code works since IDs have to be unique and thus the function always returns exactly one element (or null if none was found).



                  However, getElementsByClassName(), querySelectorAll(), and other getElementsBy* methods return an array-like collection of elements. Iterate over it like you would with a real array:



                  var elems = document.getElementsByClassName('myElement');
                  for(var i = 0; i < elems.length; i++) {
                  elems[i].style.size = '100px';
                  }


                  If you prefer something shorter, consider using jQuery:



                  $('.myElement').css('size', '100px');





                  share|improve this answer














                  Your getElementById() code works since IDs have to be unique and thus the function always returns exactly one element (or null if none was found).



                  However, getElementsByClassName(), querySelectorAll(), and other getElementsBy* methods return an array-like collection of elements. Iterate over it like you would with a real array:



                  var elems = document.getElementsByClassName('myElement');
                  for(var i = 0; i < elems.length; i++) {
                  elems[i].style.size = '100px';
                  }


                  If you prefer something shorter, consider using jQuery:



                  $('.myElement').css('size', '100px');






                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Aug 5 '17 at 8:59









                  Makyen

                  20.2k83768




                  20.2k83768










                  answered May 21 '12 at 23:18









                  ThiefMaster

                  236k61462555




                  236k61462555








                  • 1




                    Does that also apply to <iframe> which is also part of your domain
                    – JMASTER B
                    Sep 1 '16 at 1:25












                  • It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
                    – user2437417
                    Apr 26 at 20:40
















                  • 1




                    Does that also apply to <iframe> which is also part of your domain
                    – JMASTER B
                    Sep 1 '16 at 1:25












                  • It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
                    – user2437417
                    Apr 26 at 20:40










                  1




                  1




                  Does that also apply to <iframe> which is also part of your domain
                  – JMASTER B
                  Sep 1 '16 at 1:25






                  Does that also apply to <iframe> which is also part of your domain
                  – JMASTER B
                  Sep 1 '16 at 1:25














                  It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
                  – user2437417
                  Apr 26 at 20:40






                  It's 2018... Just create a wrapper function for querySelectorAll() and you can have nice short code without a large, old-school dependency. qSA(".myElement").forEach(el => el.style.size = "100px") Maybe have the wrapper receive a callback. qSA(".myElement", el => el.style.size = "100px")
                  – user2437417
                  Apr 26 at 20:40















                  8














                  You are using a array as an object, the difference between getElementbyId and
                  getElementsByClassName is that:





                  • getElementbyId will return you an object.


                  • getElementsByClassName will return you an array.


                  getElementsByClassName




                  The getElementsByClassName(classNames) method takes a string that
                  contains an unordered set of unique space-separated tokens
                  representing classes. When called, the method must return a live
                  NodeList object containing all the elements in the document that
                  have all the classes specified in that argument, having obtained the
                  classes by splitting a string on spaces. If there are no tokens
                  specified in the argument, then the method must return an empty
                  NodeList.




                  https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname



                  getElementById




                  The getElementById() method accesses the first element with the specified id.




                  http://www.w3schools.com/jsref/met_doc_getelementbyid.asp



                  in your code the lines:




                  1- document.getElementsByClassName('myElement').style.size = '100px';




                  will NOT work as expected, cos the getElementByClassName will return an array, and the array will NOT have the style property, you gonna access each element by iterating them.



                  That's why the function getElementById was working for you, this function will return you the direct object , and so you will be able to access the style property.






                  share|improve this answer


























                    8














                    You are using a array as an object, the difference between getElementbyId and
                    getElementsByClassName is that:





                    • getElementbyId will return you an object.


                    • getElementsByClassName will return you an array.


                    getElementsByClassName




                    The getElementsByClassName(classNames) method takes a string that
                    contains an unordered set of unique space-separated tokens
                    representing classes. When called, the method must return a live
                    NodeList object containing all the elements in the document that
                    have all the classes specified in that argument, having obtained the
                    classes by splitting a string on spaces. If there are no tokens
                    specified in the argument, then the method must return an empty
                    NodeList.




                    https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname



                    getElementById




                    The getElementById() method accesses the first element with the specified id.




                    http://www.w3schools.com/jsref/met_doc_getelementbyid.asp



                    in your code the lines:




                    1- document.getElementsByClassName('myElement').style.size = '100px';




                    will NOT work as expected, cos the getElementByClassName will return an array, and the array will NOT have the style property, you gonna access each element by iterating them.



                    That's why the function getElementById was working for you, this function will return you the direct object , and so you will be able to access the style property.






                    share|improve this answer
























                      8












                      8








                      8






                      You are using a array as an object, the difference between getElementbyId and
                      getElementsByClassName is that:





                      • getElementbyId will return you an object.


                      • getElementsByClassName will return you an array.


                      getElementsByClassName




                      The getElementsByClassName(classNames) method takes a string that
                      contains an unordered set of unique space-separated tokens
                      representing classes. When called, the method must return a live
                      NodeList object containing all the elements in the document that
                      have all the classes specified in that argument, having obtained the
                      classes by splitting a string on spaces. If there are no tokens
                      specified in the argument, then the method must return an empty
                      NodeList.




                      https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname



                      getElementById




                      The getElementById() method accesses the first element with the specified id.




                      http://www.w3schools.com/jsref/met_doc_getelementbyid.asp



                      in your code the lines:




                      1- document.getElementsByClassName('myElement').style.size = '100px';




                      will NOT work as expected, cos the getElementByClassName will return an array, and the array will NOT have the style property, you gonna access each element by iterating them.



                      That's why the function getElementById was working for you, this function will return you the direct object , and so you will be able to access the style property.






                      share|improve this answer












                      You are using a array as an object, the difference between getElementbyId and
                      getElementsByClassName is that:





                      • getElementbyId will return you an object.


                      • getElementsByClassName will return you an array.


                      getElementsByClassName




                      The getElementsByClassName(classNames) method takes a string that
                      contains an unordered set of unique space-separated tokens
                      representing classes. When called, the method must return a live
                      NodeList object containing all the elements in the document that
                      have all the classes specified in that argument, having obtained the
                      classes by splitting a string on spaces. If there are no tokens
                      specified in the argument, then the method must return an empty
                      NodeList.




                      https://www.w3.org/TR/2008/WD-html5-20080610/dom.html#getelementsbyclassname



                      getElementById




                      The getElementById() method accesses the first element with the specified id.




                      http://www.w3schools.com/jsref/met_doc_getelementbyid.asp



                      in your code the lines:




                      1- document.getElementsByClassName('myElement').style.size = '100px';




                      will NOT work as expected, cos the getElementByClassName will return an array, and the array will NOT have the style property, you gonna access each element by iterating them.



                      That's why the function getElementById was working for you, this function will return you the direct object , and so you will be able to access the style property.







                      share|improve this answer












                      share|improve this answer



                      share|improve this answer










                      answered Feb 15 '16 at 2:53









                      Alvaro Joao

                      4,69952451




                      4,69952451























                          7














                          The following description is taken from this page:




                          The getElementsByClassName() method returns a collection of all elements in the document with the specified class name, as a NodeList object.



                          The NodeList object represents a collection of nodes. The nodes can be
                          accessed by index numbers. The index starts at 0.



                          Tip: You can use the length property of the NodeList object to determine the number of elements with a specified class name, then you can loop through all elements and extract the info you want.




                          So, as a parameter getElementsByClassName would accept a class name.



                          If this is your HTML body:



                          <div id="first" class="menuItem"></div>
                          <div id="second" class="menuItem"></div>
                          <div id="third" class="menuItem"></div>
                          <div id="footer"></div>


                          then var menuItems = document.getElementsByClassName('menuItem') would return a collection (not an array) of the 3 upper <div>s, as they match the given class name.



                          You can then iterate over this nodes (<div>s in this case) collection with:



                          for (var menuItemIndex = 0 ; menuItems.length ; menuItemIndex ++) {
                          var currentMenuItem = menuItems[menuItemIndex];
                          // do stuff with currentMenuItem as a node.
                          }


                          Please refer to this post for more on differences between elements and nodes.






                          share|improve this answer




























                            7














                            The following description is taken from this page:




                            The getElementsByClassName() method returns a collection of all elements in the document with the specified class name, as a NodeList object.



                            The NodeList object represents a collection of nodes. The nodes can be
                            accessed by index numbers. The index starts at 0.



                            Tip: You can use the length property of the NodeList object to determine the number of elements with a specified class name, then you can loop through all elements and extract the info you want.




                            So, as a parameter getElementsByClassName would accept a class name.



                            If this is your HTML body:



                            <div id="first" class="menuItem"></div>
                            <div id="second" class="menuItem"></div>
                            <div id="third" class="menuItem"></div>
                            <div id="footer"></div>


                            then var menuItems = document.getElementsByClassName('menuItem') would return a collection (not an array) of the 3 upper <div>s, as they match the given class name.



                            You can then iterate over this nodes (<div>s in this case) collection with:



                            for (var menuItemIndex = 0 ; menuItems.length ; menuItemIndex ++) {
                            var currentMenuItem = menuItems[menuItemIndex];
                            // do stuff with currentMenuItem as a node.
                            }


                            Please refer to this post for more on differences between elements and nodes.






                            share|improve this answer


























                              7












                              7








                              7






                              The following description is taken from this page:




                              The getElementsByClassName() method returns a collection of all elements in the document with the specified class name, as a NodeList object.



                              The NodeList object represents a collection of nodes. The nodes can be
                              accessed by index numbers. The index starts at 0.



                              Tip: You can use the length property of the NodeList object to determine the number of elements with a specified class name, then you can loop through all elements and extract the info you want.




                              So, as a parameter getElementsByClassName would accept a class name.



                              If this is your HTML body:



                              <div id="first" class="menuItem"></div>
                              <div id="second" class="menuItem"></div>
                              <div id="third" class="menuItem"></div>
                              <div id="footer"></div>


                              then var menuItems = document.getElementsByClassName('menuItem') would return a collection (not an array) of the 3 upper <div>s, as they match the given class name.



                              You can then iterate over this nodes (<div>s in this case) collection with:



                              for (var menuItemIndex = 0 ; menuItems.length ; menuItemIndex ++) {
                              var currentMenuItem = menuItems[menuItemIndex];
                              // do stuff with currentMenuItem as a node.
                              }


                              Please refer to this post for more on differences between elements and nodes.






                              share|improve this answer














                              The following description is taken from this page:




                              The getElementsByClassName() method returns a collection of all elements in the document with the specified class name, as a NodeList object.



                              The NodeList object represents a collection of nodes. The nodes can be
                              accessed by index numbers. The index starts at 0.



                              Tip: You can use the length property of the NodeList object to determine the number of elements with a specified class name, then you can loop through all elements and extract the info you want.




                              So, as a parameter getElementsByClassName would accept a class name.



                              If this is your HTML body:



                              <div id="first" class="menuItem"></div>
                              <div id="second" class="menuItem"></div>
                              <div id="third" class="menuItem"></div>
                              <div id="footer"></div>


                              then var menuItems = document.getElementsByClassName('menuItem') would return a collection (not an array) of the 3 upper <div>s, as they match the given class name.



                              You can then iterate over this nodes (<div>s in this case) collection with:



                              for (var menuItemIndex = 0 ; menuItems.length ; menuItemIndex ++) {
                              var currentMenuItem = menuItems[menuItemIndex];
                              // do stuff with currentMenuItem as a node.
                              }


                              Please refer to this post for more on differences between elements and nodes.







                              share|improve this answer














                              share|improve this answer



                              share|improve this answer








                              edited May 23 '17 at 11:47









                              Community

                              11




                              11










                              answered Jan 7 '16 at 9:14









                              remdevtec

                              2,29811020




                              2,29811020























                                  4














                                  ES6 provides Array.from() method, which creates a new Array instance from an array-like or iterable object.






                                  let boxes = document.getElementsByClassName('box');

                                  Array.from(boxes).forEach(v => v.style.background = 'green');
                                  console.log(Array.from(boxes));

                                  .box {
                                  width: 50px;
                                  height: 50px;
                                  margin: 5px;
                                  background: blue;
                                  display: inline-block;
                                  }

                                  <div class='box'></div>
                                  <div class='box'></div>
                                  <div class='box'></div>
                                  <div class='box'></div>





                                  As you can see inside the code snippet, after using Array.from() function you are then able to manipulate over each element.





                                  The same solution using jQuery.






                                  $('.box').css({'background':'green'});

                                  .box {
                                  width: 50px;
                                  height: 50px;
                                  margin: 5px;
                                  background: blue;
                                  display: inline-block;
                                  }

                                  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                                  <div class='box'></div>
                                  <div class='box'></div>
                                  <div class='box'></div>
                                  <div class='box'></div>








                                  share|improve this answer




























                                    4














                                    ES6 provides Array.from() method, which creates a new Array instance from an array-like or iterable object.






                                    let boxes = document.getElementsByClassName('box');

                                    Array.from(boxes).forEach(v => v.style.background = 'green');
                                    console.log(Array.from(boxes));

                                    .box {
                                    width: 50px;
                                    height: 50px;
                                    margin: 5px;
                                    background: blue;
                                    display: inline-block;
                                    }

                                    <div class='box'></div>
                                    <div class='box'></div>
                                    <div class='box'></div>
                                    <div class='box'></div>





                                    As you can see inside the code snippet, after using Array.from() function you are then able to manipulate over each element.





                                    The same solution using jQuery.






                                    $('.box').css({'background':'green'});

                                    .box {
                                    width: 50px;
                                    height: 50px;
                                    margin: 5px;
                                    background: blue;
                                    display: inline-block;
                                    }

                                    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                                    <div class='box'></div>
                                    <div class='box'></div>
                                    <div class='box'></div>
                                    <div class='box'></div>








                                    share|improve this answer


























                                      4












                                      4








                                      4






                                      ES6 provides Array.from() method, which creates a new Array instance from an array-like or iterable object.






                                      let boxes = document.getElementsByClassName('box');

                                      Array.from(boxes).forEach(v => v.style.background = 'green');
                                      console.log(Array.from(boxes));

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>





                                      As you can see inside the code snippet, after using Array.from() function you are then able to manipulate over each element.





                                      The same solution using jQuery.






                                      $('.box').css({'background':'green'});

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>








                                      share|improve this answer














                                      ES6 provides Array.from() method, which creates a new Array instance from an array-like or iterable object.






                                      let boxes = document.getElementsByClassName('box');

                                      Array.from(boxes).forEach(v => v.style.background = 'green');
                                      console.log(Array.from(boxes));

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>





                                      As you can see inside the code snippet, after using Array.from() function you are then able to manipulate over each element.





                                      The same solution using jQuery.






                                      $('.box').css({'background':'green'});

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>








                                      let boxes = document.getElementsByClassName('box');

                                      Array.from(boxes).forEach(v => v.style.background = 'green');
                                      console.log(Array.from(boxes));

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>





                                      let boxes = document.getElementsByClassName('box');

                                      Array.from(boxes).forEach(v => v.style.background = 'green');
                                      console.log(Array.from(boxes));

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>





                                      $('.box').css({'background':'green'});

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>





                                      $('.box').css({'background':'green'});

                                      .box {
                                      width: 50px;
                                      height: 50px;
                                      margin: 5px;
                                      background: blue;
                                      display: inline-block;
                                      }

                                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>
                                      <div class='box'></div>






                                      share|improve this answer














                                      share|improve this answer



                                      share|improve this answer








                                      edited Apr 4 '17 at 9:21

























                                      answered Feb 21 '17 at 23:07









                                      kind user

                                      20.1k51942




                                      20.1k51942























                                          3














                                          In Other Words




                                          • document.querySelector() selects only the first one element of the specified selector. So it doesn't spit out an array, it's a single value. Similar to document.getElementById() which fetches ID-elements only, since IDs have to be unique.


                                          • document.querySelectorAll() selects all elements with the specified selector and returns them in an array. Similar to document.getElementsByClassName() for classes and document.getElementsByTagName() tags only.






                                          Why use querySelector?



                                          It's used merely for the sole purpose of ease and brevity.






                                          Why use getElement/sBy?*



                                          Faster performance.






                                          Why this performance difference?



                                          Both ways of selection has the purpose of creating a NodeList for further use.
                                          querySelectors generates a static NodeList with the selectors thus it must be first created from scratch.
                                          getElement/sBy* immediately adapts the existing live NodeList of the current DOM.



                                          So, when to use which method it's up to you/your project/your device.






                                          Infos



                                          Demo of all methods
                                          NodeList Documentation
                                          Performance Test






                                          share|improve this answer




























                                            3














                                            In Other Words




                                            • document.querySelector() selects only the first one element of the specified selector. So it doesn't spit out an array, it's a single value. Similar to document.getElementById() which fetches ID-elements only, since IDs have to be unique.


                                            • document.querySelectorAll() selects all elements with the specified selector and returns them in an array. Similar to document.getElementsByClassName() for classes and document.getElementsByTagName() tags only.






                                            Why use querySelector?



                                            It's used merely for the sole purpose of ease and brevity.






                                            Why use getElement/sBy?*



                                            Faster performance.






                                            Why this performance difference?



                                            Both ways of selection has the purpose of creating a NodeList for further use.
                                            querySelectors generates a static NodeList with the selectors thus it must be first created from scratch.
                                            getElement/sBy* immediately adapts the existing live NodeList of the current DOM.



                                            So, when to use which method it's up to you/your project/your device.






                                            Infos



                                            Demo of all methods
                                            NodeList Documentation
                                            Performance Test






                                            share|improve this answer


























                                              3












                                              3








                                              3






                                              In Other Words




                                              • document.querySelector() selects only the first one element of the specified selector. So it doesn't spit out an array, it's a single value. Similar to document.getElementById() which fetches ID-elements only, since IDs have to be unique.


                                              • document.querySelectorAll() selects all elements with the specified selector and returns them in an array. Similar to document.getElementsByClassName() for classes and document.getElementsByTagName() tags only.






                                              Why use querySelector?



                                              It's used merely for the sole purpose of ease and brevity.






                                              Why use getElement/sBy?*



                                              Faster performance.






                                              Why this performance difference?



                                              Both ways of selection has the purpose of creating a NodeList for further use.
                                              querySelectors generates a static NodeList with the selectors thus it must be first created from scratch.
                                              getElement/sBy* immediately adapts the existing live NodeList of the current DOM.



                                              So, when to use which method it's up to you/your project/your device.






                                              Infos



                                              Demo of all methods
                                              NodeList Documentation
                                              Performance Test






                                              share|improve this answer














                                              In Other Words




                                              • document.querySelector() selects only the first one element of the specified selector. So it doesn't spit out an array, it's a single value. Similar to document.getElementById() which fetches ID-elements only, since IDs have to be unique.


                                              • document.querySelectorAll() selects all elements with the specified selector and returns them in an array. Similar to document.getElementsByClassName() for classes and document.getElementsByTagName() tags only.






                                              Why use querySelector?



                                              It's used merely for the sole purpose of ease and brevity.






                                              Why use getElement/sBy?*



                                              Faster performance.






                                              Why this performance difference?



                                              Both ways of selection has the purpose of creating a NodeList for further use.
                                              querySelectors generates a static NodeList with the selectors thus it must be first created from scratch.
                                              getElement/sBy* immediately adapts the existing live NodeList of the current DOM.



                                              So, when to use which method it's up to you/your project/your device.






                                              Infos



                                              Demo of all methods
                                              NodeList Documentation
                                              Performance Test







                                              share|improve this answer














                                              share|improve this answer



                                              share|improve this answer








                                              edited Mar 19 at 15:01

























                                              answered Oct 23 '17 at 11:41









                                              Thielicious

                                              1,9431119




                                              1,9431119























                                                  2














                                                  It returns Array-like list.



                                                  You make that an Array as example



                                                  var el = getElementsByClassName("elem");
                                                  el = Array.prototype.slice.call(el); //this line
                                                  el[0].appendChild(otherElem);





                                                  share|improve this answer


























                                                    2














                                                    It returns Array-like list.



                                                    You make that an Array as example



                                                    var el = getElementsByClassName("elem");
                                                    el = Array.prototype.slice.call(el); //this line
                                                    el[0].appendChild(otherElem);





                                                    share|improve this answer
























                                                      2












                                                      2








                                                      2






                                                      It returns Array-like list.



                                                      You make that an Array as example



                                                      var el = getElementsByClassName("elem");
                                                      el = Array.prototype.slice.call(el); //this line
                                                      el[0].appendChild(otherElem);





                                                      share|improve this answer












                                                      It returns Array-like list.



                                                      You make that an Array as example



                                                      var el = getElementsByClassName("elem");
                                                      el = Array.prototype.slice.call(el); //this line
                                                      el[0].appendChild(otherElem);






                                                      share|improve this answer












                                                      share|improve this answer



                                                      share|improve this answer










                                                      answered Jun 17 '16 at 3:21









                                                      atilkan

                                                      2,1331830




                                                      2,1331830























                                                          2














                                                          You could get a single element by running



                                                          document.querySelector('.myElement').style.size = '100px';


                                                          but it's going to work for the first element with class .myElement.



                                                          If you would like apply this for all elements with the class I suggest you to use



                                                          document.querySelectorAll('.myElement').forEach(function(element) {
                                                          element.style.size = '100px';
                                                          });





                                                          share|improve this answer




























                                                            2














                                                            You could get a single element by running



                                                            document.querySelector('.myElement').style.size = '100px';


                                                            but it's going to work for the first element with class .myElement.



                                                            If you would like apply this for all elements with the class I suggest you to use



                                                            document.querySelectorAll('.myElement').forEach(function(element) {
                                                            element.style.size = '100px';
                                                            });





                                                            share|improve this answer


























                                                              2












                                                              2








                                                              2






                                                              You could get a single element by running



                                                              document.querySelector('.myElement').style.size = '100px';


                                                              but it's going to work for the first element with class .myElement.



                                                              If you would like apply this for all elements with the class I suggest you to use



                                                              document.querySelectorAll('.myElement').forEach(function(element) {
                                                              element.style.size = '100px';
                                                              });





                                                              share|improve this answer














                                                              You could get a single element by running



                                                              document.querySelector('.myElement').style.size = '100px';


                                                              but it's going to work for the first element with class .myElement.



                                                              If you would like apply this for all elements with the class I suggest you to use



                                                              document.querySelectorAll('.myElement').forEach(function(element) {
                                                              element.style.size = '100px';
                                                              });






                                                              share|improve this answer














                                                              share|improve this answer



                                                              share|improve this answer








                                                              edited Jul 2 '17 at 21:06









                                                              JJJ

                                                              29k147591




                                                              29k147591










                                                              answered Jul 2 '17 at 19:29









                                                              Sergey

                                                              984




                                                              984























                                                                  2














                                                                  /*
                                                                  * To hide all elements with the same class,
                                                                  * use looping to reach each element with that class.
                                                                  * In this case, looping is done recursively
                                                                  */

                                                                  const hideAll = (className, i=0) => {
                                                                  if(!document.getElementsByClassName(className)[i]){ //exits the loop when element of that id does not exist
                                                                  return;
                                                                  }

                                                                  document.getElementsByClassName(className)[i].style.visibility = 'hidden'; //hide element
                                                                  return hideAll(className, i+1) //loop for the next element
                                                                  }

                                                                  hideAll('appBanner') //the function call requires the class name





                                                                  share|improve this answer


























                                                                    2














                                                                    /*
                                                                    * To hide all elements with the same class,
                                                                    * use looping to reach each element with that class.
                                                                    * In this case, looping is done recursively
                                                                    */

                                                                    const hideAll = (className, i=0) => {
                                                                    if(!document.getElementsByClassName(className)[i]){ //exits the loop when element of that id does not exist
                                                                    return;
                                                                    }

                                                                    document.getElementsByClassName(className)[i].style.visibility = 'hidden'; //hide element
                                                                    return hideAll(className, i+1) //loop for the next element
                                                                    }

                                                                    hideAll('appBanner') //the function call requires the class name





                                                                    share|improve this answer
























                                                                      2












                                                                      2








                                                                      2






                                                                      /*
                                                                      * To hide all elements with the same class,
                                                                      * use looping to reach each element with that class.
                                                                      * In this case, looping is done recursively
                                                                      */

                                                                      const hideAll = (className, i=0) => {
                                                                      if(!document.getElementsByClassName(className)[i]){ //exits the loop when element of that id does not exist
                                                                      return;
                                                                      }

                                                                      document.getElementsByClassName(className)[i].style.visibility = 'hidden'; //hide element
                                                                      return hideAll(className, i+1) //loop for the next element
                                                                      }

                                                                      hideAll('appBanner') //the function call requires the class name





                                                                      share|improve this answer












                                                                      /*
                                                                      * To hide all elements with the same class,
                                                                      * use looping to reach each element with that class.
                                                                      * In this case, looping is done recursively
                                                                      */

                                                                      const hideAll = (className, i=0) => {
                                                                      if(!document.getElementsByClassName(className)[i]){ //exits the loop when element of that id does not exist
                                                                      return;
                                                                      }

                                                                      document.getElementsByClassName(className)[i].style.visibility = 'hidden'; //hide element
                                                                      return hideAll(className, i+1) //loop for the next element
                                                                      }

                                                                      hideAll('appBanner') //the function call requires the class name






                                                                      share|improve this answer












                                                                      share|improve this answer



                                                                      share|improve this answer










                                                                      answered Nov 25 at 4:06









                                                                      Irina Mityugova

                                                                      211




                                                                      211























                                                                          -1














                                                                          With ES5+ (any browsed nowadays - 2017) you should be able to do






                                                                          .forEach.call(document.getElementsByClassName('answer'), function(el) {
                                                                          el.style.color= 'red';
                                                                          });








                                                                          share|improve this answer




























                                                                            -1














                                                                            With ES5+ (any browsed nowadays - 2017) you should be able to do






                                                                            .forEach.call(document.getElementsByClassName('answer'), function(el) {
                                                                            el.style.color= 'red';
                                                                            });








                                                                            share|improve this answer


























                                                                              -1












                                                                              -1








                                                                              -1






                                                                              With ES5+ (any browsed nowadays - 2017) you should be able to do






                                                                              .forEach.call(document.getElementsByClassName('answer'), function(el) {
                                                                              el.style.color= 'red';
                                                                              });








                                                                              share|improve this answer














                                                                              With ES5+ (any browsed nowadays - 2017) you should be able to do






                                                                              .forEach.call(document.getElementsByClassName('answer'), function(el) {
                                                                              el.style.color= 'red';
                                                                              });








                                                                              .forEach.call(document.getElementsByClassName('answer'), function(el) {
                                                                              el.style.color= 'red';
                                                                              });





                                                                              .forEach.call(document.getElementsByClassName('answer'), function(el) {
                                                                              el.style.color= 'red';
                                                                              });






                                                                              share|improve this answer














                                                                              share|improve this answer



                                                                              share|improve this answer








                                                                              edited Dec 2 '16 at 8:39

























                                                                              answered Apr 20 '15 at 16:03









                                                                              Matas Vaitkevicius

                                                                              32.3k15161172




                                                                              32.3k15161172






























                                                                                  draft saved

                                                                                  draft discarded




















































                                                                                  Thanks for contributing an answer to Stack Overflow!


                                                                                  • Please be sure to answer the question. Provide details and share your research!

                                                                                  But avoid



                                                                                  • Asking for help, clarification, or responding to other answers.

                                                                                  • Making statements based on opinion; back them up with references or personal experience.


                                                                                  To learn more, see our tips on writing great answers.





                                                                                  Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                                                                  Please pay close attention to the following guidance:


                                                                                  • Please be sure to answer the question. Provide details and share your research!

                                                                                  But avoid



                                                                                  • Asking for help, clarification, or responding to other answers.

                                                                                  • Making statements based on opinion; back them up with references or personal experience.


                                                                                  To learn more, see our tips on writing great answers.




                                                                                  draft saved


                                                                                  draft discarded














                                                                                  StackExchange.ready(
                                                                                  function () {
                                                                                  StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f10693845%2fwhat-do-queryselectorall-getelementsbyclassname-and-other-getelementsby-method%23new-answer', 'question_page');
                                                                                  }
                                                                                  );

                                                                                  Post as a guest















                                                                                  Required, but never shown





















































                                                                                  Required, but never shown














                                                                                  Required, but never shown












                                                                                  Required, but never shown







                                                                                  Required, but never shown

































                                                                                  Required, but never shown














                                                                                  Required, but never shown












                                                                                  Required, but never shown







                                                                                  Required, but never shown







                                                                                  Popular posts from this blog

                                                                                  Florida Star v. B. J. F.

                                                                                  Error while running script in elastic search , gateway timeout

                                                                                  Adding quotations to stringified JSON object values