Frage

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

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

Dieser Javascript-Schnipsel gibt nur einen leeren String. Gibt es eine Möglichkeit, den Inhalt eines noscript Knoten zu bekommen?

P. S. Ich benutze Prototyp auf diesem Projekt.

War es hilfreich?

Lösung

Wenn Scripting aktiviert ist, das noscript Element ist definiert als nur Text enthalten - obwohl es sein muss, parsable Text, mit einigen Einschränkungen auf Inhalt. Mit dem im Verstand, sollten Sie in der Lage sein, den Text zu extrahieren, analysieren, und dann das gewünschte Element finden. Ein rudimentäres Beispiel dafür folgt:

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

Beachten Sie, dass, wenn ich diese Antwort ursprünglich geschrieben, die oben scheiterte in Google Chrome; Zugriff auf noscript Inhalt erscheint in diesen Tagen etwas besser unterstützt zu werden, aber es fällt mir immer noch als Rand Fall, dass vielleicht etwas häufiger als andere Elemente ist, um Fehler zu zeigen. - Ich würde es vermeiden, wenn Sie andere Optionen haben

Andere Tipps

Ich bin nicht sicher über Prototyp, aber das funktioniert in Chrome mit jQuery:

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

Von der HTML 4.0-Spezifikation :

  

Das NOSCRIPT Element ermöglicht Autoren alternativen Inhalt zu liefern, wenn ein Skript nicht ausgeführt wird. Der Inhalt eines NOSCRIPT Element sollte nur von einem Skript-aware User-Agenten in den folgenden Fällen gemacht werden:

     
      
  • Der User-Agent ist so konfiguriert, keine Skripts zu bewerten.
  •   
  • Der User-Agent unterstützt keine Skriptsprache von einem Element SCRIPT aufgerufen früher im Dokument.
  •   

Es scheint mir, dass dies bedeutet, dass der gesamte Inhalt des NOSCRIPT-Tages (in diesem Fall Ihre div) werden vollständig ignoriert, wenn Scripting im Browser aktiviert ist. Haben Sie sich vergewissern, dass das „Beispiel“ div durch das DOM überhaupt in Ihrem Fall zugänglich ist?

Test mit Firefox 3.0.7, Safari 3.2.2 und MSIE 7.0.5730.13 (alle auf WinXP SP3) scheint es, dass alles innerhalb der <noscript> Tags vollständig aus dem DOM-Baum weggelassen wird.

Es kann möglich sein, das <noscript> Element zuzugreifen selbst, aber, und dann DOM-Methoden verwenden, um die untergeordneten Elemente geändert werden.

Versuchen Sie $ ($ ( "NoScript"). Text ()) mit jQuery.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top