Есть ли HTML-код, противоположный <noscript>?

Есть ли в HTML тег, который будет отображать свое содержимое, только если включен JavaScript? Я знаю, что <noscript> работает наоборот, отображая свой HTML-контент, когда JavaScript отключен. Но я хотел бы отображать форму на сайте, только если доступен JavaScript, и объяснять им, почему они не могут использовать форму, если у них ее нет.

Единственный способ, которым я знаю, как это сделать, - использовать метод document.write(); в теге скрипта, и это кажется немного беспорядочным для больших объемов HTML.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
114
0
19 572
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

У вас может быть невидимый div, который отображается через JavaScript при загрузке страницы.

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

Здесь на ум приходит Статья Алекса, однако он применим только в том случае, если вы используете ASP.NET - его можно эмулировать в JavaScript, однако, опять же, вам придется использовать document.write ();

Вы можете установить видимость абзаца | div как «скрытый».

Затем в функции «onload» вы можете установить видимость «visible».

Что-то вроде:

Этот текст будет скрыт, если не доступен javascript.

Для этого нет метки. Вам нужно будет использовать javascript для отображения текста.

Некоторые люди уже предлагали использовать JS для динамической установки видимого CSS. Вы также можете динамически генерировать текст с помощью document.getElementById(id).innerHTML = "My Content" или динамически создавать узлы, но CSS-хак, вероятно, самый простой для чтения.

Вот пример скрытого способа div:

<!DOCTYPE html>
<html>
    <head>
        <meta charset = "utf-8">
        <title></title>
        <style>
            *[data-when-js-is-on] {
                display: none;
            }
        </style>
        <script>
            document.getElementsByTagName("style")[0].textContent = "";
        </script>
    </head>
    <body>
        <div data-when-js-is-on>
            JS is on.
        </div>
    </body>
</html>

(Возможно, вам придется подправить его для плохого IE, но вы поняли идею.)

Самый простой способ, о котором я могу думать:

<html>
<head>
    <noscript><style> .jsonly { display: none } </style></noscript>
</head>

<body>
    <p class = "jsonly">You are a JavaScript User!</p>
</body>
</html>

Без document.write, без скриптов, чистый CSS.

По крайней мере, не разрешено в стандарте xhtml.

Dykam 04.08.2009 23:56

@Dykam: это разрешено в HTML5: dev.w3.org/html5/spec/Overview.html#the-noscript-element и на практике поддерживается практически всеми браузерами.

Will 10.04.2011 00:56

@Will, Обязан иметь черных овец. Разве решение для невидимого div не является столь же чистым, но более устойчивым?

Pacerier 12.05.2014 14:02

Рекомендуется использовать display: none !important, чтобы предотвратить его переопределение более конкретными правилами (например, селекторами id или css), которые предназначены для его использования при включенных скриптах.

Istador 24.02.2015 20:08

Предупреждение: текущие версии Chrome не анализируют теги внутри <noscript> при первом обновлении страницы после отключения Javascript в настройках. Вам нужно дважды нажать перезагрузить, чтобы он заработал.

Tobia 21.04.2015 16:53

Чисто, лаконично, без использования javascript. Мне это нравится.

Dragas 26.06.2018 15:45

Прежде всего, всегда разделяйте контент, разметку и поведение!

Теперь, если вы используете библиотеку jQuery (вам действительно стоит, она делает JavaScript намного проще), следующий код должен работать:

$(document).ready(function() {
    $("body").addClass("js");
});

Это даст вам дополнительный класс в теле, когда JS включен. Теперь в CSS вы можете скрыть область, когда класс JS недоступен, и показать область, когда JS доступен.

В качестве альтернативы вы можете добавить no-js в качестве класса по умолчанию в свой тег body и использовать этот код:

$(document).ready(function() {
    $("body").removeClass("no-js");
    $("body").addClass("js");
});

Помните, что он все еще отображается, если CSS отключен.

Я действительно не согласен со всеми ответами здесь о встраивании HTML заранее и сокрытии его с помощью CSS, пока он снова не будет показан с помощью JS. Даже без включенного JavaScript этот узел все еще существует в DOM. Конечно, большинство браузеров (даже браузеры с расширенными возможностями) игнорируют его, но он все еще существует, и могут быть странные моменты, когда он снова укусит вас.

Я предпочитаю использовать jQuery для создания контента. Если содержимого будет много, то вы можете сохранить его как фрагмент HTML (только тот HTML, который вы хотите показать, и ни одного тега html, body, head и т. д.), А затем используйте функции jQuery ajax для его загрузки в полная страница.

test.html

<html>
<head>
    <script src = "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type = "text/javascript" charset = "utf-8">
     $(document).ready(function() {
       $.get('_test.html', function(html) {
         $('p:first').after(html);
       });
     });
    </script>
</head>
<body>
  <p>This is content at the top of the page.</p>
  <p>This is content at the bottom of the page.</p>
</body>
</html>

_test.html

<p>This is from an HTML fragment document</p>

результат

<p>This is content at the top of the page.</p>
<p>This is from an HTML fragment document</p>
<p>This is content at the bottom of the page.</p>

У меня есть простое и гибкое решение, несколько похожее на решение Уилла (но с дополнительным преимуществом правильного HTML):

Присвойте элементу body класс jsOff. Удалите (или замените) это на JavaScript. Есть CSS, чтобы скрыть любые элементы с классом «jsOnly» с родительским элементом с классом «jsOff».

Это означает, что если включен JavaScript, класс «jsOff» будет удален из тела. Это будет означать, что элементы с классом «jsOnly» не будут иметь родителя с классом «jsOff» и поэтому не будут соответствовать селектору CSS, который их скрывает, поэтому они будут показаны.

Если JavaScript отключен, класс "jsOff" не буду удаляется из тела. Элементы с «jsOnly» буду имеют родительский элемент с «jsOff», поэтому буду соответствует селектору CSS, который их скрывает, поэтому они будут скрыты.

Вот код:

<html>
    <head>
        <!-- put this in a separate stylesheet -->
        <style type = "text/css">
            .jsOff .jsOnly{
                display:none;
            }
        </style>
    </head>

    <body class = "jsOff">
        <script type = "text/javascript">
            document.body.className = document.body.className.replace('jsOff','jsOn');
        </script>

        <noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>

        <p class = "jsOnly">I am only shown if JS is enabled</p>
    </body>
</html>

Это действительный HTML. Это просто. Это гибко.

Просто добавьте класс jsOnly к любому элементу, который вы хотите отображать только при включенном JS.

Обратите внимание, что JavaScript, удаляющий класс «jsOff», должен выполняться как можно раньше внутри тега body. Его нельзя выполнить раньше, так как тега body еще не будет. Его не следует выполнять позже, так как это будет означать, что элементы с классом «jsOnly» могут не отображаться сразу (поскольку они будут соответствовать селектору CSS, который их скрывает, пока класс «jsOff» не будет удален из основного элемента).

Это также может предоставить механизм для стиля только js (например, .jsOn .someClass{}) и стиля no-js-only (например, .jsOff .someOtherClass{}). Вы можете использовать его как альтернативу <noscript>:

.jsOn .noJsOnly{
    display:none;
}

Мое решение

.css:

.js {
display: none;
}

.js:

$(document).ready(function() {
    $(".js").css('display', 'inline');
    $(".no-js").css('display', 'none');
});

.html:

<span class = "js">Javascript is enabled</span>
<span class = "no-js">Javascript is disabled</span>

В вашем примере html разве вы не хотите заканчивать строки?

curt 31.07.2013 06:15

За десять лет, прошедших после того, как был задан этот вопрос, в HTML был добавлен Атрибут HIDDEN. Это позволяет напрямую скрывать элементы без использования CSS. Как и в случае с решениями на основе CSS, элемент не должен быть скрыт скриптом:

<form hidden id=f>
Javascript is on, form is visible.<br>
<button>Click Me</button>
</form>
<script>
document.getElementById('f').hidden=false;
</script>
<noscript>
Javascript is off, but form is hidden, even when CSS is disabled.
</noscript>

Другие вопросы по теме