var allTags = document.evaluate("//*[contains(@src,'"+imgSrc+"')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
这是给出错误的代码,它给出:
Uncaught Error: TYPE_ERR: DOM XPath Exception 52
有人可以告诉我问题是什么吗?
var allTags = document.evaluate("//*[contains(@src,'"+imgSrc+"')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
这是给出错误的代码,它给出:
Uncaught Error: TYPE_ERR: DOM XPath Exception 52
有人可以告诉我问题是什么吗?
我没有准确的答案,但我可以猜测并给出解决方法。
首先是解决方法:更改UNORDERED_NODE_SNAPSHOT_TYPE
为不创建快照的类型(除非您需要这种方式)并返回多个节点,例如UNORDERED_NODE_ITERATOR_TYPE
(或ANY_TYPE
)。
我的猜测是:在阅读了该函数的规范后,它说“TYPE_ERR:如果结果无法转换为返回指定的类型,则引发。”。可能是它无法分配资源来创建快照或类似的东西(解决方法假设)。
编辑:
真正的问题很可能不是document.evaluate
在您的代码中调用,allTags.iterateNext
并且此调用期望allTags
是 *_NODE_ITERATOR_TYPE 而不是 *_NODE_SNAPSHOT_TYPE,使用allTags.snapshotItem
不会导致引发错误。我在jsfiddle写了一个示例,它在 2 秒后使用调用在您的问题中进行评估并以正确的方式迭代元素来更改边框。