JQuery 3.5.0 с нечетным выводом, используя html - PullRequest
0 голосов
/ 22 апреля 2020

Мне известно, что jQuery 3.5.0 содержит исправление безопасности, как описано здесь

https://www.infoq.com/news/2020/04/jquery-35-xss-vulnerability-fix/

однако я все еще был удивлен этим дело. Это правильно?

Вот мой пример. Есть ссылки на 2 jQuery библиотеки, старые и новые. Вы можете комментировать один и использовать другой

https://jsbin.com/baretotepo/edit?html, js, вывод

Код минимален и не требует пояснений, урезанный пример из реального case

Он пытается поместить на страницу немного html, но имеет ошибку, как показано здесь

<div>
  <i class="Tag" />   <--- error here
  <i class="A"></i>
</div> 
<div>
  <i class="B" />
</div>
<div>
   <i></i>
</div>

В jQuery 3.4.1 это приведет к

<div><i class="Tag"></i><i class="A"></i></div> <div><i class="B"></i></div><div><i></i></div>

В jQuery 3.5.0 это выдает

<div><i class="Tag"><i class="A"></i></i></div><i class="Tag"> <div><i class="B"></i></div><div><i class="B"><i></i></i></div></i>

Он дублирует тег 'i' с классом 'B'

Это неверный ввод, поэтому я буду примите ответ "это просто так работает"

Это в Chrome

1 Ответ

1 голос
/ 23 апреля 2020

Я спросил на форуме JQuery github, это был ответ:

Это специфическое c дублирование поведения тега удивительно, но это результат двух вещей:

  1. jQuery 3.5.0+ не пытается исправить содержимое для вас, а анализатор HTML рассматривает <i /> как просто <i> - только открывающий тег.
  2. Как показано на https://html.spec.whatwg.org/multipage/parsing.html#misnested -tags: -bi- / b- / i , <i> является элементом форматирования , и алгоритм синтаксического анализа требует, чтобы при закрытии внешнего тега без закрытия внутреннего форматирования элемент закрывается и сразу же открывается после тега закрытия внешнего тега.

    Это показывает одну из причин, по которой <i> не является просто более короткой версией <span>, если вы сбросите ее по умолчанию CSS различная семантика этого тега действительно имеет значение; Я бы не советовал использовать элементы <i> для всего, что связано не только с форматированием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...