Question

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

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

Cet extrait de code javascript renvoie simplement une chaîne vide. Existe-t-il un moyen d’obtenir le contenu d’un nœud noscript?

p.s. J'utilise un prototype pour ce projet particulier.

Était-ce utile?

La solution

Si la création de script est activée, l'élément noscript est défini comme ne contenant que du texte - bien qu'il s'agisse d'un texte analysable , avec certaines restrictions de contenu. Dans cet esprit, vous devriez pouvoir extraire le texte, l’analyser, puis trouver l’élément souhaité. Voici un exemple rudimentaire:

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

Notez que lorsque j'ai écrit cette réponse, le problème ci-dessus a échoué dans Google Chrome. L'accès au contenu de noscript semble être un peu mieux supporté de nos jours, mais il me semble toujours être un cas marginal qui est peut-être un peu plus susceptible que d'autres éléments de présenter des bogues - je l'éviterais si vous avez d'autres options.

Autres conseils

Je ne suis pas sûr du prototype, mais cela fonctionne dans Chrome avec jQuery:

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

Extrait de la spécification HTML 4.0 :

  

L'élément NOSCRIPT permet aux auteurs de fournir un contenu de remplacement lorsqu'un script n'est pas exécuté. Le contenu d'un élément NOSCRIPT ne doit être rendu par un agent utilisateur prenant en charge les scripts que dans les cas suivants:

     
      
  • L'agent utilisateur est configuré pour ne pas évaluer les scripts.
  •   
  • L'agent utilisateur ne prend pas en charge un langage de script appelé par un élément SCRIPT précédemment dans le document.
  •   

Il me semble que cela implique que tout le contenu de la balise NOSCRIPT (dans ce cas, votre div) est complètement ignoré si les scripts sont activés dans le navigateur. Avez-vous vérifié que l'exemple " " div est-il accessible par le biais du DOM dans votre cas?

Lors des tests avec Firefox 3.0.7, Safari 3.2.2 et MSIE 7.0.5730.13 (tous sous WinXP SP3), il apparaît que tout ce qui se trouve dans les balises < noscript & est complètement omis du DOM. arbre.

Il est toutefois possible d'accéder à l'élément < noscript & lui-même, puis d'utiliser des méthodes DOM pour modifier ses éléments enfants.

Essayez $ ($ (" noscript "). text ()) avec jQuery.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top