Как скрыть части HTML, когда JavaScript отключен?

Я пытаюсь разместить пользователей без JavaScript. (Кстати, это стоит сегодня?)

в одном HTML-файле я хотел бы часть его выполнить, если скрипты on, и другая часть, если скрипты выключены.

на <noscript> tag позволяет мне делать первое, но как достичь последнего? Как я могу пометить часть HTML, чтобы она не анализировалась браузером, если скрипты выкл?

6 ответов


вот видео-учебник о том, как это можно сделать с помощью jQuery:http://screenr.com/ya7

код:

<body class="noscript">
<script>
$('body').removeClass('noscript');
</script>
</body>

и затем просто скрыть соответствующие элементы под body.noscript соответственно.

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


Я искал способ сделать это, чтобы скрыть раскрывающееся меню навигации, которое становится нефункциональным, когда javascript включен. Однако все решения для изменения свойства display не работали.

Итак, то, что я сделал сначала, было присвоено ID (ddown) элементу div, окружающему раскрывающееся меню.

затем, в головном разделе HTML-документа, я добавил Это в:

<noscript>
    <style>
        #ddown {display:none;}
    </style>
</noscript>

и это просто сработало. Нет зависимость от javascript, jquery или любого другого скрипта: просто чистый HTML и CSS.


по умолчанию биты, которые вы хотите скрыть в стиле display:none и включите их с помощью jQuery или JavaScript.


кстати, это стоит усилий сейчас?

Да, стоит беспокоиться о доступности. Вы должны использовать прогрессивное улучшение, где это возможно, т. е. сделать базовую версию, которая работает без сценариев, а затем добавить функциональность сценариев поверх нее.

простым примером может быть всплывающая ссылка. Вы могли бы сделать такой:

<a href="javascript:window.open('http://example.com/');">link</a>

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

<a href="http://example.com/" 
   onclick="window.open(this.href); return false;">link</a>

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


путь jQuery:

$(document).ready(function(){
    $("body").removeClass("noJS");
});

псевдо CSS

body
    .no-js-content
        display: none;
body.noJS
    .main
        display: none;
    .no-js-content
        display: block;

HTML-код

<body class="noJS">
    <div class="main">
        This will show if JavaScript is activated
    </div>
    <div class='no-js-content'>
        This will show when JavaScript is disabled
    </div>
</body>

если содержимое имеет смысл только при включенном JavaScript, то оно должно быть вставлено кодом JavaScript напрямую, а не отображаться. Это можно сделать, просто имея HTML-шаблоны в качестве строк в вашем JavaScript-коде или используя Ajax, если HTML более сложный.

As упомянуто Рейнисом I. это идея Постепенное Повышение.

относительно методов CSS использования имени класса в теле тег, я бы посоветовал сделать это наоборот и добавить'js-enabled' класс для тега body с JavaScript, который изменит страницу CSS. Это согласуется с моим комментарием выше о сохранении всех начальных HTML "не-JavaScript дружественных".