почему href не работает, когда якорь динамически создается внутри другого якоря? - PullRequest
0 голосов
/ 19 сентября 2018

Сценарий 1:

У меня есть якорь с onclick="return false;", а затем я динамически добавляю в него еще один якорь.href не работает, когда родительский якорь имеет onclick="return false;", но работает нормально, когда я удаляю это onclick.

<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
 <head></head>
  <body>
    <a id="link1" onclick="return false;"></a>
    <script>
       var link = document.getElementById('link1')
       var newLink = document.createElement('a')
       newLink.setAttribute('href','https://wwww.google.com')
       newLink.innerHTML="google"
       //link.insertAdjacentElement('beforeend', newLink)
       link.appendChild(newLink)
    </script>
 </body>
</html>

Сценарий 2:

У меня просто есть два якоряс родительским якорем, имеющим onclick как return false.но в этом случае href внутреннего якоря работает нормально.

<a onclick="return false;"><a href="https://www.google.com">google</a></a>

Итак, проблема в том, что когда я динамически добавляю якорь в другой якорь с onclick как return false, то внутреннийhref якоря не работает, но работает нормально, когда они статически созданы.

Кто-нибудь может помочь мне разобраться в этом поведении?

1 Ответ

0 голосов
/ 19 сентября 2018

Браузер не анализирует вложенные элементы так, как вы ожидаете, но JavaScript удается получить вложенными.

Вложенные a элементы запрещены в синтаксисе HTML.Спецификации HTML не говорят почему;они просто подчеркивают правило.

С практической стороны браузеры эффективно применяют это ограничение в своих правилах синтаксического анализа, поэтому, в отличие от многих других проблем, нарушение спецификаций просто не будет работать.Синтаксические анализаторы эффективно обрабатывают начальный тег <a> внутри открытого элемента как неявное завершение открытого элемента перед началом нового.

Так что если вы напишите <a href=foo>foo <a href=bar>bar</a> zap</a>, вы не получите вложенные элементы.Браузеры будут анализировать его как <a href=foo>foo</a> <a href=bar>bar</a> zap, то есть как две последовательные ссылки, за которыми следует простой текст.

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