javascript - Wordpress swapping && for Html encoded in JS <script> tag - Stack Overflow

I want to implement a simple script onto the page using the HTML block with a JS function wrapped in a

I want to implement a simple script onto the page using the HTML block with a JS function wrapped in a script tag.

But when it gets rendered, it takes the && operator and converts it to HTML character code for ampersands(&&#038). I have tried minifying it, changing the conditional statement, but I cannot get it to run. I know the code is fine, because I tested it in the console and it works fine. I think there is just some sort of issue when Wordpress handles it.

At the moment, I cannot implement this using the functions.php file. Needs to be implemented onto the page.

Below is the code I am implementing

<script>
const mainNavLinks = document.querySelectorAll(".wp-block-senff-sticky-block ol li a");
      window.addEventListener("scroll", event => {
        let fromTop = window.scrollY - 600;
        mainNavLinks.forEach(link => {
          let section = document.querySelector(link.hash);
          if ( section !== null && section.offsetTop <= fromTop && section.offsetTop + section.offsetHeight > fromTop ) {
            link.classList.add("current");
          } else {
            link.classList.remove("current");
          }
        });
      });
</script>

Here is the output:

<script>
const mainNavLinks = document.querySelectorAll(".wp-block-senff-sticky-block ol li a");
      window.addEventListener("scroll", event => {
        let fromTop = window.scrollY - 600;
        mainNavLinks.forEach(link => {
          let section = document.querySelector(link.hash);
          if ( section !== null&&section.offsetTop <= fromTop&#038;&#038;section.offsetTop + section.offsetHeight > fromTop ) {
            link.classList.add("current");
          } else {
            link.classList.remove("current");
          }
        });
      });</script>

I want to implement a simple script onto the page using the HTML block with a JS function wrapped in a script tag.

But when it gets rendered, it takes the && operator and converts it to HTML character code for ampersands(&#038;&#038). I have tried minifying it, changing the conditional statement, but I cannot get it to run. I know the code is fine, because I tested it in the console and it works fine. I think there is just some sort of issue when Wordpress handles it.

At the moment, I cannot implement this using the functions.php file. Needs to be implemented onto the page.

Below is the code I am implementing

<script>
const mainNavLinks = document.querySelectorAll(".wp-block-senff-sticky-block ol li a");
      window.addEventListener("scroll", event => {
        let fromTop = window.scrollY - 600;
        mainNavLinks.forEach(link => {
          let section = document.querySelector(link.hash);
          if ( section !== null && section.offsetTop <= fromTop && section.offsetTop + section.offsetHeight > fromTop ) {
            link.classList.add("current");
          } else {
            link.classList.remove("current");
          }
        });
      });
</script>

Here is the output:

<script>
const mainNavLinks = document.querySelectorAll(".wp-block-senff-sticky-block ol li a");
      window.addEventListener("scroll", event => {
        let fromTop = window.scrollY - 600;
        mainNavLinks.forEach(link => {
          let section = document.querySelector(link.hash);
          if ( section !== null&&section.offsetTop <= fromTop&#038;&#038;section.offsetTop + section.offsetHeight > fromTop ) {
            link.classList.add("current");
          } else {
            link.classList.remove("current");
          }
        });
      });</script>
Share Improve this question edited Mar 2, 2020 at 15:46 Johannes 67.8k22 gold badges84 silver badges139 bronze badges asked Mar 2, 2020 at 14:14 novak1ntnovak1nt 314 bronze badges 1
  • So to confirm, !== null&&section.offsetTop part is not affected ? – GBWDev Commented Mar 2, 2020 at 15:09
Add a ment  | 

3 Answers 3

Reset to default 8

In case anyone ever runs into this again, like I did today, I found a very quick & easy fix for it here:

You must add HTML ment tags after the script tag:

<script type="text/javascript">
<!--
myfunction();
//--></script>

I believe you could stop this by adding the following to your functions.php file to stop entities being converted.

function force_decode_entities( $content ) {
  //Ensure this only runs on a specific page of your choice
  if( is_page('your-page-slug-here') ) {
    return decode_entities( $content );
  }
  return $content;
}

add_filter( 'the_content', 'force_decode_entities', 1 )

I added the if() statement because if you apply this globally, it could stop your using code blocks as normal, since it will render them as literal code that the browser would interpret.

Though, it's worth pointing out that you shouldn't run code from the admin. It's just bad practice.

You could use nested conditions as a workaround:

if ( section !== null } {
  if ( section.offsetTop <= fromTop ) {
     if (section.offsetTop + section.offsetHeight > fromTop ) {
            link.classList.add("current");
     } 
  }
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745520691a4631246.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信