Pergunta

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

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

Este trecho de javascript apenas retorna uma string vazia. Existe uma maneira de obter o conteúdo de um nó noscript?

P.S. Eu estou usando o protótipo neste projeto particular.

Foi útil?

Solução

Se o scripting estiver ativada, o elemento noscript é definido como contendo apenas texto - embora deva ser parsable texto, com algumas restrições de conteúdo. Com isso em mente, você deve ser capaz de extrair o texto, analisá-lo e, em seguida, encontrar o seu elemento desejado. Um exemplo rudimentar desse seguinte:

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);
}

Note que quando eu escrevi originalmente esta resposta, o acima falhou no Google Chrome; acesso ao conteúdo noscript parece estar um pouco melhor-suportado nos dias de hoje, mas ainda me parece um caso de ponta que é, talvez, um pouco mais prováveis ??do que outros elementos para erros de exposição - I evitar se você tiver outras opções

Outras dicas

Eu não tenho certeza sobre o protótipo, mas isso funciona em Chrome com jQuery:

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

A partir da HTML 4.0 especificação :

O elemento NOSCRIPT permite aos autores para fornecer conteúdo alternativo quando um script não é executado. O conteúdo de um elemento NOSCRIPT só deve ser prestado por um agente de usuário roteiro-aware nos seguintes casos:

  • O agente de usuário é configurado para não avaliar scripts.
  • O agente usuário não suporta uma linguagem de script chamado por um elemento SCRIPT no início do documento.

Parece-me que isto implica que todo o conteúdo da tag NOSCRIPT (neste caso, o seu div) são ignoradas completamente se scripting está habilitado no navegador. Você verificou que o "exemplo" div é acessível através do DOM em tudo no seu caso?

Os testes com o Firefox 3.0.7, Safari 3.2.2, e MSIE 7.0.5730.13 (todos em WinXP SP3), parece que tudo dentro das tags <noscript> é completamente omitido da árvore DOM.

Pode ser possível para acessar o elemento <noscript> si, no entanto, em seguida, usar métodos DOM para alterar seus elementos filho.

Tente $ ($ ( "noscript"). Text ()) com jQuery.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top