¿Existe una etiqueta en HTML que solo muestre su contenido si JavaScript está habilitado? Sé que <noscript>
funciona al revés, mostrando su contenido HTML cuando JavaScript está desactivado. Pero me gustaría mostrar un formulario en un sitio solo si JavaScript está disponible, diciéndoles por qué no pueden usar el formulario si no lo tienen.
La única forma en que sé cómo hacer esto es con el document.write();
método en una etiqueta de script, y parece un poco complicado para grandes cantidades de HTML.
javascript
html
noscript
Re0sless
fuente
fuente
display: none !important
para evitar que sea anulado por reglas más específicas (por ejemplo, por selectores de id o css), que están destinadas a su uso cuando los scripts están habilitados.<noscript>
la primera vez que actualiza una página después de deshabilitar Javascript en las preferencias. Debes presionar recargar dos veces para que funcione.Realmente no estoy de acuerdo con todas las respuestas aquí acerca de incrustar el HTML de antemano y ocultarlo con CSS hasta que se muestre nuevamente con JS. Incluso sin JavaScript habilitado, ese nodo todavía existe en el DOM. Es cierto que la mayoría de los navegadores (incluso los navegadores de accesibilidad) lo ignorarán, pero aún existe y puede haber momentos extraños en los que eso vuelva a molestarlo.
Mi método preferido sería usar jQuery para generar el contenido. Si tendrá mucho contenido, entonces puede guardarlo como un fragmento HTML (solo el HTML que querrá mostrar y ninguna de las etiquetas html, body, head, etc.) y luego use las funciones ajax de jQuery para cargarlo en la página completa.
test.html
_test.html
resultado
fuente
En primer lugar, siempre separe el contenido, el marcado y el comportamiento.
Ahora, si está utilizando la biblioteca jQuery (realmente debería hacerlo, hace que JavaScript sea mucho más fácil), el siguiente código debería funcionar:
Esto le dará una clase adicional en el cuerpo cuando JS esté habilitado. Ahora, en CSS, puede ocultar el área cuando la clase JS no está disponible y mostrar el área cuando JS está disponible.
Alternativamente, puede agregar
no-js
como clase predeterminada a su etiqueta corporal y usar este código:Recuerde que todavía se muestra si CSS está deshabilitado.
fuente
Tengo una solución simple y flexible, algo similar a la de Will (pero con el beneficio adicional de ser HTML válido):
Dale al elemento body una clase de "jsOff". Elimine (o reemplace) esto con JavaScript. Tener CSS para ocultar cualquier elemento con una clase de "jsOnly" con un elemento padre con una clase de "jsOff".
Esto significa que si JavaScript está habilitado, la clase "jsOff" se eliminará del cuerpo. Esto significará que los elementos con una clase de "jsOnly" no tendrán un padre con una clase de "jsOff" y, por lo tanto, no coincidirán con el selector de CSS que los oculta, por lo que se mostrarán.
Si JavaScript está deshabilitado, la clase "jsOff" no se eliminará del cuerpo. Los elementos con "jsOnly" tendrán un padre con "jsOff" y también lo tendrá coincidirán con el selector de CSS que los oculta, por lo que estarán ocultos.
Aquí está el código:
Es HTML válido. Es simple. Es flexible
Simplemente agregue la clase "jsOnly" a cualquier elemento que desee mostrar solo cuando JS está habilitado.
Tenga en cuenta que el JavaScript que elimina la clase "jsOff" debe ejecutarse lo antes posible dentro de la etiqueta del cuerpo. No se puede ejecutar antes, ya que la etiqueta del cuerpo aún no estará allí. No debe ejecutarse más tarde ya que significará que los elementos con la clase "jsOnly" pueden no ser visibles de inmediato (ya que coincidirán con el selector de CSS que los oculta hasta que la clase "jsOff" se elimine del elemento del cuerpo).
Esto también podría proporcionar un mecanismo para el estilo solo js (por ejemplo
.jsOn .someClass{}
) y el estilo no solo js (por ejemplo.jsOff .someOtherClass{}
). Puede usarlo para proporcionar una alternativa a<noscript>
:fuente
También puede usar Javascript para cargar contenido desde otro archivo fuente y generarlo. Sin embargo, eso puede ser un poco más de caja negra de lo que estás buscando.
fuente
Aquí hay un ejemplo de la forma div oculta:
(Probablemente tendrías que modificarlo para IE deficiente, pero entiendes la idea).
fuente
Mi solución
.css:
.js:
.html:
fuente
El artículo de Alex me viene a la mente aquí, sin embargo, solo es aplicable si está usando ASP.NET; sin embargo, podría emularse en JavaScript, pero nuevamente tendría que usar document.write ();
fuente
Puede establecer la visibilidad de un párrafo | div en 'oculto'.
Luego, en la función 'onload', puede establecer la visibilidad en 'visible'.
Algo como:
<body onload = "javascript: document.getElementById (rec) .style.visibility = visible"> <p style = "visibilidad: visible" id = "rec"> Este texto se ocultará a menos que JavaScript esté disponible. </p>
fuente
No hay una etiqueta para eso. Necesitaría usar javascript para mostrar el texto.
Algunas personas ya sugirieron usar JS para establecer CSS visible de forma dinámica. También puede generar dinámicamente el texto con
document.getElementById(id).innerHTML = "My Content"
o crear dinámicamente los nodos, pero el truco CSS es probablemente el más sencillo de leer.fuente
En la década desde que se hizo esta pregunta, el
HIDDEN
atributo se agregó a HTML. Permite ocultar elementos directamente sin usar CSS. Al igual que con las soluciones basadas en CSS, el elemento debe estar oculto por script:fuente