gpt4 book ai didi

javascript - 在使用 querySelectorAll 之前仅检查参数是否为节点是否可靠?

转载 作者:行者123 更新时间:2023-12-03 06:28:50 26 4
gpt4 key购买 nike

目前,我发现在 document 上找到了 querySelectorAll 方法。这是一个节点,而不是一个元素,可以在 HTML elements 上找到。 .

我正在使用一个函数,该函数接受节点、元素或随后查找元素的选择器作为第一个参数。我需要检查节点的类型,因为该函数应该工作是传入 document

function queryElement(elementOrSelector) {
if (!isNode(elementOrSelector)) {
elementOrSelector = document.querySelector(elementOrSelector);
}
// This next line is the line I worry about
var possibleElements = elementOrSelector.querySelector('[test]');
...
}

function isNode(o) {
return (
typeof Node === "object" ? o instanceof Node :
o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string"
);
}

这允许我传递以下内容:

queryElement(document);
// or
queryElement(document.querySelector('select'));

它们都会起作用。但现在,我只是检查它们是否属于 node 类型,从技术上讲,querySelectorAll 方法仅存在于 document 上,并且HTML Element 原型(prototype)。我相信 Element 继承自 Node 所以这就是它大部分工作的原因。但如果我只检查 node 的类型,我会遇到问题吗?是否有一个特定的节点,它也不是一个Element,并且没有可用的querySelectorAll

最佳答案

Is there a particular node that is also not an Element that will not have querySelectorAll available to it?

是的。例如:

  • 属性节点(在 DOM4 中删除)
  • 文档类型
  • 文本节点
  • 评论节点

我认为检查某物是否是节点的唯一可靠方法是尝试将其用作节点,并查看它是否抛出错误。

但是,检查对象是否具有 querySelector 属性(也许它的值是一个函数)可能就足够了。

关于javascript - 在使用 querySelectorAll 之前仅检查参数是否为节点是否可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38517888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com