Подтвердить что ты не робот

Почему вложенные якорные метки запрещены?

Я узнал, что привязка тегов привязки не соответствует стандарту HTML.

Из W3:

Связи и привязки, определенные элементом A, не должны быть вложенными; элемент A не должен содержать никаких других элементов A.

Поскольку DTD определяет элемент LINK как пустой, элементы LINK также могут быть не вложены.

Казалось бы, что альтернативы, такие как предложенные в выбранном ответе в этом вопросе, имели бы больше шансов создать неожиданное поведение, чем просто вложение якорей!

Также кажется, что overkill позволяет обработчикам событий onclick просто перенаправлять страницу в JS. Не говоря уже о том, что использование решения для скрипта может вызвать проблемы для пользователей, просмотр которых отключен.

РЕДАКТИРОВАТЬ

Интересно было то, что я работал над скрипкой, чтобы продемонстрировать, и я упустил из виду, что хром фактически реструктурировал DOM как таковой:

<div id="container">

    <a href="#" onclick="location.href='http://yahoo.com'; return false;"></a>
    <div class="parent">
        <a href="#" onclick="location.href='http://yahoo.com'; return false;">Parent Element</a>
        <a href="#" onclick="location.href='http://google.com'; return false;">
            <div class="child">Child Element</div>
        </a>
        <a href="#" onclick="location.href='http://bing.com'; return false;">
            <div class="child">Other Child</div>
        </a>
    </div>

</div>

Я упустил это из виду, потому что видел, как работает зависание, и наводил указатель мыши на текст. Знание этого теперь не обязательно меняет мой вопрос, но он действительно иллюстрирует, что он даже не работает так, как я думал.

4b9b3361

Ответ 1

Имейте в виду, что якорь - это не просто ссылка, это также то, к чему можно связать. (Хотя прежнее использование гораздо более распространено, чем последнее.) Цитируя W3C (старый, но релевантный):

Якорь - это фрагмент текста, который отмечает начало и/или конец гипертекстовой ссылки.

Для этого не думайте о якоре в качестве ссылки. Подумайте об этом как о пункте в документе, который соединяется с (и/или с) другой точкой (в том же документе или другом документе, это не имеет значения). Две точки в нефизическом пространстве, которые связаны нефизическим потоком.

Учитывая, что якоря не должны содержать много контента. Если он содержит много контента, он перестает становиться "точкой" и начинает становиться "областью". Например, представьте себе якорь, который при визуализации занимает больше места, чем браузер может отображать сразу. Если что-то связывается с этим якорем, куда он должен идти? Начало? Средний? Конец? (Интуитивно вы можете подумать о начале, но вы получите идею.)

Кроме того, якоря определенно не должны содержать других якорей. Нефизические связи между нефизическими точками могут стать двусмысленными. Подключается ли дочерний якорь к другой точке, или же ведущий якорь подключается к другой точке? Это, вероятно, не приводит к большому количеству сделок в большинстве случаев, поскольку подавляющее большинство якорей сегодня являются односторонними ссылками от якоря к другому документу. Но цель анкера - это не просто односторонняя ссылка на другой документ, поэтому определение продолжает воплощать эту цель.

Ответ 2

для <a> имеет модель контента:

Прозрачный, но не должно быть потокового интерактивного контента.

Итак, спецификация на самом деле сложнее, чем вы говорите. Это также относится к <button> - по существу у вас не может быть рабочих ссылок внутри ссылок или кнопок внутри кнопок.

К сожалению, у меня нет четкого ответа на ваш вопрос, почему - я могу только догадываться. Одной из очевидных причин является двусмысленность, которую она вызывает (например, какой якорь следует соблюдать при нажатии на внутреннюю)?

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

Ответ 3

Якорная вставка не рекомендуется стандартами (хотя все браузеры, на которых я тестировал это, похоже, приводят к самой внутренней цели клика) из-за двусмысленности.

Не логично говорить, что большая часть должна привести к определенной странице, и в этой части небольшая часть должна вести куда-то еще. Я все еще должен видеть какой-либо прецедент для такого поведения. С эволюцией доступных языков сценариев этот вид итераций или наследия может работать (события javascript click на divs для примера), но никогда не будет код, который хочет направить на определенный URL-адрес, а затем на другой (href файл-привязки родителей).

Изменить. Рассматривая вопрос, на который вы ссылаетесь, укладка двух якорей, указывающих на один и тот же href, абсолютно бесполезна. Просто удалите вложенную, и все будет хорошо. Если это потому, что вы сделали правило CSS, например a a{color:red;}, используйте диапазон! Или даже div с display:inline, но, пожалуйста, довольно, пожалуйста, якорь должен куда-то идти, его нельзя использовать только для целей стилизации или что-то в этом роде.