check class/element status after click












1














Assuming I am unable to see below code, I have no idea how long does the timeout set, and I am unable to change the original code






document.querySelector('button').addEventListener('click', function(){ 
setTimeout(function(){
document.querySelector('.old').classList = 'old new';

}, 100);
});

<div class="old">OLD</div>
<button>Click</button>





What I'd like to achieve is that once the new class is added then I want to change the TEXT line, the hack code as below






document.querySelector('button').addEventListener('click', function(){ 
setTimeout(function(){
document.querySelector('.old').classList = 'old new';

}, 100);
});

document.querySelector('button').addEventListener('click', function(){
if(document.querySelectorAll('.new').length !== 0) {
document.querySelector('.old').innerText = "123"
}
});

<div class="old">OLD</div>
<button>Click</button>





document.querySelector('button').addEventListener('click', function(){ 
if(document.querySelectorAll('.new').length !== 0) {
document.querySelector('.old').innerText = "123"
}
});


Since I am unable to know how long the timeout secs, so my first click won't work as it executes right away. So I have to add the timeout seconds bigger than the original. Is there an efficient way to detected if new class is added?
or timeout is the best solution for this use case? Thanks










share|improve this question





























    1














    Assuming I am unable to see below code, I have no idea how long does the timeout set, and I am unable to change the original code






    document.querySelector('button').addEventListener('click', function(){ 
    setTimeout(function(){
    document.querySelector('.old').classList = 'old new';

    }, 100);
    });

    <div class="old">OLD</div>
    <button>Click</button>





    What I'd like to achieve is that once the new class is added then I want to change the TEXT line, the hack code as below






    document.querySelector('button').addEventListener('click', function(){ 
    setTimeout(function(){
    document.querySelector('.old').classList = 'old new';

    }, 100);
    });

    document.querySelector('button').addEventListener('click', function(){
    if(document.querySelectorAll('.new').length !== 0) {
    document.querySelector('.old').innerText = "123"
    }
    });

    <div class="old">OLD</div>
    <button>Click</button>





    document.querySelector('button').addEventListener('click', function(){ 
    if(document.querySelectorAll('.new').length !== 0) {
    document.querySelector('.old').innerText = "123"
    }
    });


    Since I am unable to know how long the timeout secs, so my first click won't work as it executes right away. So I have to add the timeout seconds bigger than the original. Is there an efficient way to detected if new class is added?
    or timeout is the best solution for this use case? Thanks










    share|improve this question



























      1












      1








      1







      Assuming I am unable to see below code, I have no idea how long does the timeout set, and I am unable to change the original code






      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      <div class="old">OLD</div>
      <button>Click</button>





      What I'd like to achieve is that once the new class is added then I want to change the TEXT line, the hack code as below






      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      document.querySelector('button').addEventListener('click', function(){
      if(document.querySelectorAll('.new').length !== 0) {
      document.querySelector('.old').innerText = "123"
      }
      });

      <div class="old">OLD</div>
      <button>Click</button>





      document.querySelector('button').addEventListener('click', function(){ 
      if(document.querySelectorAll('.new').length !== 0) {
      document.querySelector('.old').innerText = "123"
      }
      });


      Since I am unable to know how long the timeout secs, so my first click won't work as it executes right away. So I have to add the timeout seconds bigger than the original. Is there an efficient way to detected if new class is added?
      or timeout is the best solution for this use case? Thanks










      share|improve this question















      Assuming I am unable to see below code, I have no idea how long does the timeout set, and I am unable to change the original code






      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      <div class="old">OLD</div>
      <button>Click</button>





      What I'd like to achieve is that once the new class is added then I want to change the TEXT line, the hack code as below






      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      document.querySelector('button').addEventListener('click', function(){
      if(document.querySelectorAll('.new').length !== 0) {
      document.querySelector('.old').innerText = "123"
      }
      });

      <div class="old">OLD</div>
      <button>Click</button>





      document.querySelector('button').addEventListener('click', function(){ 
      if(document.querySelectorAll('.new').length !== 0) {
      document.querySelector('.old').innerText = "123"
      }
      });


      Since I am unable to know how long the timeout secs, so my first click won't work as it executes right away. So I have to add the timeout seconds bigger than the original. Is there an efficient way to detected if new class is added?
      or timeout is the best solution for this use case? Thanks






      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      <div class="old">OLD</div>
      <button>Click</button>





      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      <div class="old">OLD</div>
      <button>Click</button>





      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      document.querySelector('button').addEventListener('click', function(){
      if(document.querySelectorAll('.new').length !== 0) {
      document.querySelector('.old').innerText = "123"
      }
      });

      <div class="old">OLD</div>
      <button>Click</button>





      document.querySelector('button').addEventListener('click', function(){ 
      setTimeout(function(){
      document.querySelector('.old').classList = 'old new';

      }, 100);
      });

      document.querySelector('button').addEventListener('click', function(){
      if(document.querySelectorAll('.new').length !== 0) {
      document.querySelector('.old').innerText = "123"
      }
      });

      <div class="old">OLD</div>
      <button>Click</button>






      javascript






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 20 at 3:03

























      asked Nov 20 at 2:53









      olo

      2,075123063




      2,075123063
























          2 Answers
          2






          active

          oldest

          votes


















          2














          You might use Mutation Observer for this purpose:






          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>








          share|improve this answer





















          • Was about to post the same thing, this is the preferred solution
            – AnonymousSB
            Nov 20 at 3:46










          • Yes, this is definitely a better solution. Thanks!
            – olo
            Nov 20 at 3:57










          • @olo, happy to help!
            – Kosh Very
            Nov 20 at 3:58



















          0














          Use ClassList API to get this done. As new class will be add after some time. If new class is not added to dom then you can't get reference of this node to compare. The ClassList provides a handy method to solve this issue. use contains method to check if new class added or not. If added then change the text.



          use below code



          document.querySelector('button').addEventListener('click', function(){ 
          if(document.querySelectorAll('.old')[0].classList.contains("new")) {
          document.querySelector('.old').innerText = "123"
          }
          });


          Solution






          share|improve this answer





















          • This only works if you click the button twice, it doesn't observe when the classList changes.
            – AnonymousSB
            Nov 20 at 3:53











          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%2f53385538%2fcheck-class-element-status-after-click%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          2 Answers
          2






          active

          oldest

          votes








          2 Answers
          2






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          2














          You might use Mutation Observer for this purpose:






          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>








          share|improve this answer





















          • Was about to post the same thing, this is the preferred solution
            – AnonymousSB
            Nov 20 at 3:46










          • Yes, this is definitely a better solution. Thanks!
            – olo
            Nov 20 at 3:57










          • @olo, happy to help!
            – Kosh Very
            Nov 20 at 3:58
















          2














          You might use Mutation Observer for this purpose:






          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>








          share|improve this answer





















          • Was about to post the same thing, this is the preferred solution
            – AnonymousSB
            Nov 20 at 3:46










          • Yes, this is definitely a better solution. Thanks!
            – olo
            Nov 20 at 3:57










          • @olo, happy to help!
            – Kosh Very
            Nov 20 at 3:58














          2












          2








          2






          You might use Mutation Observer for this purpose:






          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>








          share|improve this answer












          You might use Mutation Observer for this purpose:






          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>








          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>





          document.querySelector('button').addEventListener('click', function() {
          setTimeout(function() {
          document.querySelector('.old').classList = 'old new';

          }, 500);
          });

          document.querySelector('button').addEventListener('click', function() {
          var observer = new MutationObserver(function(mutationsList, observer) {
          for (var mutation of mutationsList) {
          if (
          mutation.type === 'attributes' &&
          mutation.attributeName === 'class' &&
          mutation.target.classList.contains('new')
          ) {
          mutation.target.innerText = "123";
          observer.disconnect();
          }
          }
          });

          observer.observe(document.querySelector('.old'), {attributes: !0});

          });

          <div class="old">OLD</div>
          <button>Click</button>






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 20 at 3:44









          Kosh Very

          10k1823




          10k1823












          • Was about to post the same thing, this is the preferred solution
            – AnonymousSB
            Nov 20 at 3:46










          • Yes, this is definitely a better solution. Thanks!
            – olo
            Nov 20 at 3:57










          • @olo, happy to help!
            – Kosh Very
            Nov 20 at 3:58


















          • Was about to post the same thing, this is the preferred solution
            – AnonymousSB
            Nov 20 at 3:46










          • Yes, this is definitely a better solution. Thanks!
            – olo
            Nov 20 at 3:57










          • @olo, happy to help!
            – Kosh Very
            Nov 20 at 3:58
















          Was about to post the same thing, this is the preferred solution
          – AnonymousSB
          Nov 20 at 3:46




          Was about to post the same thing, this is the preferred solution
          – AnonymousSB
          Nov 20 at 3:46












          Yes, this is definitely a better solution. Thanks!
          – olo
          Nov 20 at 3:57




          Yes, this is definitely a better solution. Thanks!
          – olo
          Nov 20 at 3:57












          @olo, happy to help!
          – Kosh Very
          Nov 20 at 3:58




          @olo, happy to help!
          – Kosh Very
          Nov 20 at 3:58













          0














          Use ClassList API to get this done. As new class will be add after some time. If new class is not added to dom then you can't get reference of this node to compare. The ClassList provides a handy method to solve this issue. use contains method to check if new class added or not. If added then change the text.



          use below code



          document.querySelector('button').addEventListener('click', function(){ 
          if(document.querySelectorAll('.old')[0].classList.contains("new")) {
          document.querySelector('.old').innerText = "123"
          }
          });


          Solution






          share|improve this answer





















          • This only works if you click the button twice, it doesn't observe when the classList changes.
            – AnonymousSB
            Nov 20 at 3:53
















          0














          Use ClassList API to get this done. As new class will be add after some time. If new class is not added to dom then you can't get reference of this node to compare. The ClassList provides a handy method to solve this issue. use contains method to check if new class added or not. If added then change the text.



          use below code



          document.querySelector('button').addEventListener('click', function(){ 
          if(document.querySelectorAll('.old')[0].classList.contains("new")) {
          document.querySelector('.old').innerText = "123"
          }
          });


          Solution






          share|improve this answer





















          • This only works if you click the button twice, it doesn't observe when the classList changes.
            – AnonymousSB
            Nov 20 at 3:53














          0












          0








          0






          Use ClassList API to get this done. As new class will be add after some time. If new class is not added to dom then you can't get reference of this node to compare. The ClassList provides a handy method to solve this issue. use contains method to check if new class added or not. If added then change the text.



          use below code



          document.querySelector('button').addEventListener('click', function(){ 
          if(document.querySelectorAll('.old')[0].classList.contains("new")) {
          document.querySelector('.old').innerText = "123"
          }
          });


          Solution






          share|improve this answer












          Use ClassList API to get this done. As new class will be add after some time. If new class is not added to dom then you can't get reference of this node to compare. The ClassList provides a handy method to solve this issue. use contains method to check if new class added or not. If added then change the text.



          use below code



          document.querySelector('button').addEventListener('click', function(){ 
          if(document.querySelectorAll('.old')[0].classList.contains("new")) {
          document.querySelector('.old').innerText = "123"
          }
          });


          Solution







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 20 at 3:37









          Sourav

          1545




          1545












          • This only works if you click the button twice, it doesn't observe when the classList changes.
            – AnonymousSB
            Nov 20 at 3:53


















          • This only works if you click the button twice, it doesn't observe when the classList changes.
            – AnonymousSB
            Nov 20 at 3:53
















          This only works if you click the button twice, it doesn't observe when the classList changes.
          – AnonymousSB
          Nov 20 at 3:53




          This only works if you click the button twice, it doesn't observe when the classList changes.
          – AnonymousSB
          Nov 20 at 3:53


















          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%2f53385538%2fcheck-class-element-status-after-click%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

          "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

          Alcedinidae

          Origin of the phrase “under your belt”?