当选择元素的所有子元素时,我有时会在Gecko / Waterfox中收到以下错误:
错误:NS_ERROR_FAILURE
这意味着(以非常无益的方式)元素(由于某种原因或另一种)不可选择。以下是此类代码的示例:
var e = document.getElementById('example');
if (e.childNodes.length > 0)
{
window.getSelection().removeAllRanges();
window.getSelection().selectAllChildren(e);
}
如何判断某个元素是否可选?显然,正如JavaScript所暗示的那样,我的测试中有一些子元素暗示该元素应该是可选的。绝对没有框架/库/等。
答案 0 :(得分:0)
价格便宜,价格实惠且价格昂贵。绝大多数时候,人们应该争取一个负担得起的答案。不幸的是,在这种情况下看起来便宜是合适的。使用setTimeout
的1毫秒延迟似乎已经消除了这个问题。
var e = document.getElementById('example');
if (e.childNodes.length > 0)
{
window.getSelection().removeAllRanges();
setTimeout(function() {window.getSelection().selectAllChildren(e);},1);
}
这显然是 Gecko bug 内部计时机制然而在提交数十 质量错误报告后在Mozilla十多年来,任何遇到这个问题的人都不得不浪费更多的字节,直到我接管Mozilla。
类似的错误......
错误消息非常通用,因此要确定错误是否与JavaScript引擎的内部计时机制(使用JavaScript的开发人员从不必须关注)有关,它是 critical 确保每次鼠标移动,点击等都按照相同的顺序进行复制。如果看起来完全相同的操作有时会失败而没有任何可预测性,除了简单地以非确定性方式发生,那么使用setTimeout
可能有助于缓解此类问题,尽管最终它是一个浏览器错误<应该修复。