Pregunta

<noscript><div id="example">I want to get this innerHTML</div></noscript>

<script type="text/javascript"> alert($('example').innerHTML);</script>

Este fragmento de JavaScript solo devuelve una cadena vacía. ¿Hay alguna forma de obtener el contenido de un nodo de noscript?

p.s. Estoy usando un prototipo en este proyecto en particular.

¿Fue útil?

Solución

Si las secuencias de comandos están habilitadas, el elemento noscript se define como solo contiene texto , aunque debe ser un texto analizable , con algunas restricciones de contenido. Teniendo eso en cuenta, deberías poder extraer el texto, analizarlo y luego encontrar el elemento deseado. Un ejemplo rudimentario de esto sigue:

var nos = document.getElementsByTagName("noscript")[0]; 
// in some browsers, contents of noscript hang around in one form or another
var nosHtml = nos.textContent||nos.innerHTML; 

if ( nosHtml )
{
  var temp = document.createElement("div");
  temp.innerHTML = nosHtml;

  // lazy man's query library: add it, find it, remove it
  document.body.appendChild(temp);
  var ex = document.getElementById("example");
  document.body.removeChild(temp);

  alert(ex.innerHTML);
}

Tenga en cuenta que cuando escribí originalmente esta respuesta, lo anterior falló en Google Chrome; El acceso al contenido de noscript parece estar mejor respaldado en estos días, pero todavía me parece un caso marginal que es quizás algo más probable que otros elementos para exhibir errores; lo evitaría si tuviera otras opciones.

Otros consejos

No estoy seguro acerca del prototipo, pero esto funciona en Chrome con jQuery:

$('noscript').before($('noscript').text());

Del especificación HTML 4.0 :

  

El elemento NOSCRIPT permite a los autores proporcionar contenido alternativo cuando no se ejecuta un script. El contenido de un elemento NOSCRIPT solo debe ser procesado por un agente de usuario compatible con secuencias de comandos en los siguientes casos:

     
      
  • El agente de usuario está configurado para no evaluar scripts.
  •   
  • El agente de usuario no admite un lenguaje de script invocado por un elemento SCRIPT anteriormente en el documento.
  •   

Me parece que esto implica que todos los contenidos de la etiqueta NOSCRIPT (en este caso, su div) se ignoran por completo si las secuencias de comandos están habilitadas en el navegador. ¿Ha verificado que el " ejemplo " div es accesible a través del DOM en su caso?

Probando con Firefox 3.0.7, Safari 3.2.2 y MSIE 7.0.5730.13 (todo en WinXP SP3) parece que todo lo que se encuentra dentro de las etiquetas < noscript > se omite completamente del DOM árbol.

Sin embargo,

puede ser posible acceder al elemento < noscript > , y luego usar métodos DOM para cambiar sus elementos secundarios.

Pruebe $ ($ (" noscript "). text ()) con jQuery.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top