Javascript 如何使“.innerText”忽略不可见元素的不可见子元素?
测试代码的结果如下:Javascript 如何使“.innerText”忽略不可见元素的不可见子元素?,javascript,innertext,Javascript,Innertext,测试代码的结果如下: div[0].innerText === "aaaaa zzzzz" div[1].innerText === "aaaaainvisiblezzzzz" 如何强制innerText为div[1]提供与为div[0]提供相同的结果 我曾尝试将div[1]附加到临时文档中,但由于文档没有实际显示,因此没有任何帮助。只有将其附加到一个真正可见的文档中才能起作用 测试代码 var div=[]; div[0]=document.getElementById(“可见”)
div[0].innerText === "aaaaa zzzzz"
div[1].innerText === "aaaaainvisiblezzzzz"
如何强制innerText
为div[1]
提供与为div[0]
提供相同的结果
我曾尝试将div[1]
附加到临时文档中,但由于文档没有实际显示,因此没有任何帮助。只有将其附加到一个真正可见的文档中才能起作用
测试代码
var div=[];
div[0]=document.getElementById(“可见”);
div[1]=div[0]。克隆节点(true);
显示(0);
表演(1);
功能表演(一){
document.getElementById(“输出”).innerHTML+=
“div[“+i+”]。innerText==”+
div[i].innerText.replace(/\n/g,“") + "代码>”;
}
#可见{显示:块;字体系列:无衬线;字体大小:较大;颜色:红色;}
代码{背景色:浅灰色;填充:0.318em;}
AAAA
看不见的
zzzzz
只有将其附加到用户真正可见的文档中才能起作用
但是用户不一定要看到它。:-)如果附加它,抓取innerText
,然后删除它,用户将永远看不到它:
var div=[];
div[0]=document.getElementById(“可见”);
div[1]=div[0]。克隆节点(true);
显示(0);
document.body.appendChild(div[1]);//*****
表演(1);
document.body.removeChild(div[1]);//*****
功能表演(一){
document.getElementById(“输出”).innerHTML+=
“div[“+i+”]。innerText==”+
div[i].innerText.replace(/\n/g,“") + "代码>”;
}
#可见{显示:块;字体系列:无衬线;字体大小:较大;颜色:红色;}
代码{背景色:浅灰色;填充:0.318em;}
AAAA
看不见的
zzzzz
jQuery可以接受吗?@DineiRockenbach:我认为如果你为了其他用户的利益发布jQuery答案也可以。我会投票表决,但我只选择一个纯Javascript答案作为解决方案。如果没有人找到直接的解决方案,我会采取这种变通办法。无可否认,这并不可怕。看了这一点后,我不得不同意这是最好的。您唯一能做的另一件事就是查找样式属性。但是,如果样式表应用了可见性规则,这无论如何都不会起作用。@7vujy0f0hy:我添加了一个替代方案。因为我们不必担心样式表,只需要内联样式,而且只有几个样式会导致文本被忽略,计算内部文本非常简单。@T.J.Crowder:您的函数看起来令人鼓舞。我想知道它与本机innerText
算法的兼容性如何。当您想要将实时结果与不使用您的算法生成的数据库中的结果进行比较时,您需要合理的兼容性保证功能。我曾希望Javascript为innerText
@7vujy0f0hy提供一些“虚拟可见性”模式:要获得高保真的结果,您几乎需要遵从浏览器(上面的第一个解决方案),但请注意,不同的浏览器对innerText
有不同的解释。WHAT-WG有,如果您想充实上述功能和b/c,它会很有用。它鼓励实现收敛于该定义。该定义不在HTML规范的W3C版本中,而是由WHAT-WG组成的(部分)实际提供真实世界浏览器的供应商。。。