确定元素是否可选

时间:2018-02-23 00:36:26

标签: javascript selection textselection

当选择元素的所有子元素时,我有时会在Gecko / Waterfox中收到以下错误:

  

错误:NS_ERROR_FAILURE

这意味着(以非常无益的方式)元素(由于某种原因或另一种)可选择。以下是此类代码的示例:

var e = document.getElementById('example');

if (e.childNodes.length > 0)
{
 window.getSelection().removeAllRanges();
 window.getSelection().selectAllChildren(e);
}

如何判断某个元素是否可选?显然,正如JavaScript所暗示的那样,我的测试中有一些子元素暗示该元素应该是可选的。绝对没有框架/库/等。

1 个答案:

答案 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 可能有助于缓解此类问题,尽管最终它是一个浏览器错误<应该修复。