Domanda

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

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

Questo frammento javascript restituisce solo una stringa vuota. Esiste un modo per ottenere il contenuto di un nodo noscript?

P.S. Sto usando il prototipo per questo particolare progetto.

È stato utile?

Soluzione

Se lo scripting è abilitato, l'elemento noscript è definito come contenente solo testo - sebbene debba essere analizzabile , con alcune restrizioni sul contenuto. Con questo in mente, dovresti essere in grado di estrarre il testo, analizzarlo e quindi trovare l'elemento desiderato. Ne segue un esempio rudimentale:

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

Nota che quando ho scritto originariamente questa risposta, quanto sopra non è riuscito in Google Chrome; l'accesso al contenuto di noscript sembra essere supportato in qualche modo meglio in questi giorni, ma mi sembra ancora un caso limite che forse è un po 'più probabile rispetto ad altri elementi per mostrare bug - lo eviterei se avessi altre opzioni.

Altri suggerimenti

Non sono sicuro del prototipo, ma funziona con Chrome con jQuery:

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

Dalla Specifica HTML 4.0 :

  

L'elemento NOSCRIPT consente agli autori di fornire contenuti alternativi quando uno script non viene eseguito. Il contenuto di un elemento NOSCRIPT deve essere reso da un agente utente sensibile agli script nei seguenti casi:

     
      
  • L'agente utente è configurato per non valutare gli script.
  •   
  • L'agente utente non supporta un linguaggio di scripting invocato da un elemento SCRIPT precedentemente nel documento.
  •   

Mi sembra che questo implichi che l'intero contenuto del tag NOSCRIPT (in questo caso, il tuo div) venga ignorato del tutto se lo scripting è abilitato nel browser. Hai verificato che l'esempio " " div è accessibile attraverso il DOM nel tuo caso?

Test con Firefox 3.0.7, Safari 3.2.2 e MSIE 7.0.5730.13 (tutti su WinXP SP3) sembra che tutto all'interno dei tag < noscript > sia completamente omesso dal DOM albero.

Tuttavia, potrebbe essere possibile accedere all'elemento < noscript > stesso, quindi utilizzare i metodi DOM per modificarne gli elementi figlio.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top