为什么从NOSCRIPT中检索html会返回htmlentities?

时间:2009-05-06 05:42:56

标签: jquery

考虑代码:

<noscript><div>FOO</div></noscript>

运行

$('noscript').html();

返回&lt;div&gt;FOO&lt;/div&gt;

但正在运行

$('noscript').text();

返回原始html。

这与我的期望相反。对此有解释吗?

3 个答案:

答案 0 :(得分:6)

似乎有一个PhantomJS错误似乎逃脱了page.content中noscript标签中的实体。此功能将使它们恢复正常的形式。 S object来自npmjs.org上的字符串包。

function fixNoScript(content) {
  var noscript = /<\s*noscript\s*>([^<]+)<\s*\/\s*noscript\s*>/ig;
  var matches = content.match(noscript);
  for ( var i = 0; match && i < matches.length; i++ ) {
    var decoded = S(matches[i]).decodeHTMLEntities().s;
    var index = content.indexOf(matches[i]);
    content = content.substring(0, index) + 
              decoded +
              content.substring(index + matches[i].length);

  }
  return content;
}

答案 1 :(得分:4)

这更像是一个DOM怪癖而不是jQuery怪癖:

$("<noscript><div>FOO</div></noscript>")[0].innerHTML == "&lt;div&gt;FOO&lt;/div&gt;"

$("<noscript><div>FOO</div></noscript>")[0].textContent == "<div>FOO</div>"

基本上,此行为的行为并不一致,正如this answer所解释的那样。

答案 2 :(得分:0)

是的,这是完全不一致的,因为htmlentities被破坏了。 &amp; copy始终转换为BOTH功能中的版权字符。基本上应该有一个函数只是提取html,而不进行任何转换。