Javascript 即使在浏览器控制台中看到元素,也无法按类名获取它

Javascript 即使在浏览器控制台中看到元素,也无法按类名获取它,javascript,html,reactjs,ecmascript-6,Javascript,Html,Reactjs,Ecmascript 6,所以我有一个非常令人沮丧的问题 我试图获取一个带有React/JS的HTML元素,它只存在于库中,而不存在于我的代码中,所以我不能使用useRef或类似的东西 如果我这样做: useffect(()=>{ const handleContainer=document.getElementsByClassName('handle-container'); log({handleContainer:handleContainer[0]}); },[文件]; 它打印:{handleContainer

所以我有一个非常令人沮丧的问题

我试图获取一个带有React/JS的HTML元素,它只存在于库中,而不存在于我的代码中,所以我不能使用useRef或类似的东西

如果我这样做:

useffect(()=>{
const handleContainer=document.getElementsByClassName('handle-container');
log({handleContainer:handleContainer[0]});
},[文件];
它打印:
{handleContainer:undefined}

但有了这一点:

useffect(()=>{
const handleContainer=document.getElementsByClassName('handle-container');
log({handleContainer});
},[文件];
它打印这个:

我正在尝试禁用该元素上的右键单击事件。 像这样:

document.getElementsByClassName('handle-container')?[0]?.setAttribute('oncontextmenu','return false;');
但我失败了

有什么想法吗?
有什么想法吗?

这很可能是因为控制台正在显示使用
console.log({handleContainer})引用的HTMLCollection的当前状态console.log({handleContainer:handleContainer[0]})时,第一个元素(可能还不存在)的快照上的code>

你能试着添加一个像下面这样的超时,看看会发生什么吗?这将有望给库和DOM足够的时间来加载,并使其在effect函数运行时可查询

 useEffect(() => {    
   setTimeout(() => {
        const handleContainer = document.getElementsByClassName('handle-container');
        console.log({ handleContainer: handleContainer[0] });
   }, 1000);
 }, [document]);
如果这显示了预期的元素,那么它将指示在没有计时器的情况下调用效果时,需要使用
{handleContainer:handleContainer[0]}
引用的类元素还不存在,但因为控制台正在使用
{handleContainer}显示HTMLCollection对象的引用
它仍将显示在控制台中,因为它没有从子数组中取消引用它


参考文献:

这很可能是因为控制台正在显示使用
console.log({handleContainer})引用的HTMLCollection的当前状态console.log({handleContainer:handleContainer[0]})时,第一个元素(可能还不存在)的快照上的code>

你能试着添加一个像下面这样的超时,看看会发生什么吗?这将有望给库和DOM足够的时间来加载,并使其在effect函数运行时可查询

 useEffect(() => {    
   setTimeout(() => {
        const handleContainer = document.getElementsByClassName('handle-container');
        console.log({ handleContainer: handleContainer[0] });
   }, 1000);
 }, [document]);
如果这显示了预期的元素,那么它将指示在没有计时器的情况下调用效果时,需要使用
{handleContainer:handleContainer[0]}
引用的类元素还不存在,但因为控制台正在使用
{handleContainer}显示HTMLCollection对象的引用
它仍将显示在控制台中,因为它没有从子数组中取消引用它


参考文献:

为什么在
文档.getElementsByClassName('handle-container')?[0]中使用“?”
?您可以通过执行
document.getElementsByClassName('handle-container')[0]
并使用quotes->console.log({“handleContainer”:handleContainer[0]})来获取第一个元素;嗯,对我来说,神秘的是为什么它不能安慰我。。。`console.log({handleContainer:handleContainer.item(0)})有效吗?@Max这是检查
null
s的类型脚本,但很快它将成为JS标准的一部分。您现在使用它实际上取决于您使用的transpiler@不相关的DCR。没有引号是可以的。为什么在
文档.getElementsByClassName('handle-container')?[0]?
中使用“?”?您可以通过执行
document.getElementsByClassName('handle-container')[0]
并使用quotes->console.log({“handleContainer”:handleContainer[0]})来获取第一个元素;嗯,对我来说,神秘的是为什么它不能安慰我。。。`console.log({handleContainer:handleContainer.item(0)})有效吗?@Max这是检查
null
s的类型脚本,但很快它将成为JS标准的一部分。您现在使用它实际上取决于您使用的transpiler@不相关的DCR。没有引号是可以的。