Сломанный скрипт при добавлении в заголовки в WordPress

На самом деле, нет необходимости проверять случаи «вручную». Вы можете просто запустить следующий алгоритм:

  1. Итерации по данной последовательности. Начните с пустого стека.
  2. Если текущий символ является открывающей скобкой, просто нажмите его в стек.
  3. Если это закрывающая скобка, убедитесь, что стек не пуст и верхним элементом шага является подходящая открывающая скобка (она соответствует этому). Если это не так, сообщите об ошибке. В противном случае вытащите верхний элемент из стека.
  4. В конце концов последовательность правильная, если стек пуст.

Почему это правильно? Вот эскиз доказательства: если этот алгоритм сообщил, что последовательность исправлена, она обнаружила совпадающую пару всех скобок. Таким образом, последовательность действительно правильна по определению. Если он сообщил об ошибке:

  1. Если в конце стека не было пустым, баланс открытия и закрытия скобок не равен нулю. Таким образом, это не правильная последовательность.
  2. Если стек был пуст, когда нам нужно было поместить элемент, баланс снова выключился.
  3. Если на верхнем месте был неправильный элемент пачки «неправильных» скобок должны соответствовать друг другу. Это означает, что последовательность неверна.

Я показал, что:

  • Если алгоритм сообщил, что последовательность верна, это верно.
  • Если алгоритм сообщил, что последовательность неверна, это неверно (обратите внимание, что я не использую тот факт, что нет других случаев, кроме тех, которые указаны в вашем вопросе).

Эти две точки подразумевают, что этот алгоритм работает для всех возможных входов.

0
задан yellowpisagor 16 January 2019 в 22:58
поделиться

1 ответ

Трудно сказать, не видя, что находится в вашем файле url/index.js, но, вероятно, он пытается добавить узел к элементу <body> или его потомку до того, как он существует. Он еще не будет существовать, если вы вызываете этот скрипт в разделе <head>.

Причина, по которой <p></p> исправляет это, заключается в том, что если браузер получает следующее:

<head>
  <script>
    console.log(document.body);
  </script>
</head>

Он видит, что это недействительный HTML, и поэтому он интерпретируется как:

<html>
  <head>
    <script>
    console.log(document.body);
    </script>
  </head>
  <body></body>
</html>

- тело не существует к моменту запуска сценария, поэтому консоль записывает в журнал null.

Если браузер получает:

<p>Paragraph</p>
<head>
  <script>
    console.log(document.body);
  </script>
</head>

... это снова недействительный HTML, и он интерпретируется как

<html>
  <head></head>
  <body>
    <p>Paragraph</p>
    <script>
      console.log(document.body);
    </script>
  </body>
</html>

... и элемент тела существует, когда скрипт выполняется, поэтому он регистрирует элемент body на консоли.

В итоге: Вы должны убедиться, что весь ваш HTML верен, и что ваш скрипт только пытается добавить что-то к элементу, который уже существует.

0
ответ дан markmoxx 16 January 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: