考虑代码:
<noscript><div>FOO</div></noscript>
运行
$('noscript').html();
返回<div>FOO</div>
但正在运行
$('noscript').text();
返回原始html。
这与我的期望相反。对此有解释吗?
答案 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 == "<div>FOO</div>"
$("<noscript><div>FOO</div></noscript>")[0].textContent == "<div>FOO</div>"
基本上,此行为的行为并不一致,正如this answer所解释的那样。
答案 2 :(得分:0)
是的,这是完全不一致的,因为htmlentities被破坏了。 &amp; copy始终转换为BOTH功能中的版权字符。基本上应该有一个函数只是提取html,而不进行任何转换。