使用Javascript </noscript>访问<noscript>的内容

时间:2009-03-06 23:39:59

标签: javascript innerhtml noscript

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

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

此javascript代码段只返回一个空字符串。有没有办法获取noscript节点的内容?

P.S。我正在使用这个特定项目的原型。

5 个答案:

答案 0 :(得分:14)

如果启用了脚本,the noscript element is defined as containing only text - 虽然它必须是可解析的文本,但对内容有一些限制。考虑到这一点,您应该能够提取文本,解析它,然后找到您想要的元素。以下是一个基本的例子:

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

请注意,当我最初撰写此答案时,上述操作在Google Chrome中失败了;这些天对noscript内容的访问似乎有点得到了更好的支持,但它仍然让我感到很尴尬,因为它可能比其他元素更容易出现错误 - 如果你有其他选择,我会避免使用它。

答案 1 :(得分:4)

我不确定原型,但这可以在Chrome中使用jQuery:

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

答案 2 :(得分:3)

使用Firefox 3.0.7,Safari 3.2.2和MSIE 7.0.5730.13(所有在WinXP SP3上)进行测试,看来<noscript>标记内的所有内容都完全从DOM树中删除。

然而,可以访问<noscript>元素本身,然后使用DOM方法更改其子元素。

答案 3 :(得分:3)

来自HTML 4.0 spec

  

NOSCRIPT元素允许作者在未执行脚本时提供备用内容。在以下情况下,NOSCRIPT元素的内容只能由脚本感知用户代理呈现:

     
      
  • 用户代理配置为不评估脚本。
  •   
  • 用户代理不支持文档前面的SCRIPT元素调用的脚本语言。
  •   

在我看来,这意味着如果在浏览器中启用了脚本,则会完全忽略NOSCRIPT标记的全部内容(在本例中为div)。您是否确认在您的情况下可以通过DOM访问“示例”div?

答案 4 :(得分:2)

使用jQuery尝试$($(“noscript”)。text())。