Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在纯javascript中查找类似于jQuery的隐藏元素的宽度_Javascript_Jquery - Fatal编程技术网

在纯javascript中查找类似于jQuery的隐藏元素的宽度

在纯javascript中查找类似于jQuery的隐藏元素的宽度,javascript,jquery,Javascript,Jquery,我试图使用纯JavaScript复制jQuery width函数。如果元素可见,纯JavaScript函数(如getComputedStyle或offsetWidth)似乎可以工作,但当元素隐藏时,我无法复制相同的行为 似乎jQuery在这里做了一些不同的事情,我不知道到底是什么 为了清楚地解释我试图做的事情,这里有一个代码笔示例,我尝试使用getComputedStyle与jQuery width函数进行比较,以计算动态变化的隐藏元素的宽度 constinput=$('input'); 常量

我试图使用纯JavaScript复制jQuery width函数。如果元素可见,纯JavaScript函数(如getComputedStyle或offsetWidth)似乎可以工作,但当元素隐藏时,我无法复制相同的行为

似乎jQuery在这里做了一些不同的事情,我不知道到底是什么

为了清楚地解释我试图做的事情,这里有一个代码笔示例,我尝试使用getComputedStyle与jQuery width函数进行比较,以计算动态变化的隐藏元素的宽度

constinput=$('input');
常量sizer=$('.sizer');
const sizerDom=document.querySelector('.sizer');
input.on('input',evt=>{
text(evt.target.value);
console.log(sizer.width())
log(getComputedStyle(sizerDom,null).width);
});
.sizer{
显示:无;
}

这是因为jQuery的内部逻辑中存在漏洞,因此它会强制浏览器立即呈现它。否则,测量值将始终为
0
,因为从未渲染元素

此外,您可以使用
sizerDom.getBoundingClientRect()
来获取实际数字,而不需要进行额外的解析,而不用尝试使用
window.getComputedStyle
来返回CSS维度的字符串值(例如
100px

constinput=$('input');
常量sizer=$('.sizer');
const sizerDom=document.querySelector('.sizer');
input.on('input',evt=>{
text(evt.target.value);
console.log(sizer.width())
const cachedDisplay=window.getComputedStyle(sizerDom.display);
sizerDom.style.display='inline block';
log(sizerDom.getBoundingClientRect().width);
sizerDom.style.display=cachedDisplay;
});
.sizer{
显示:无;
}


OP想要获得JS中
隐藏的
元素的宽度-你是通过某种黑客使用
内联块来实现这一点的-根据这个问题的标题,
getBoundingClientRect()
隐藏的
元素不起作用。@AlwaysHelping我不确定你的抱怨是什么:OP问jQuery是如何做到的,我只是向他展示了jQuery用来嗅出可见隐藏元素的维度的“黑客”。没有达到你的用户名多少?请不要把我的意见个人。我喜欢你老老实实做的黑客。我从来没想过。根据OP问题,我假设他想要的是纯JS中隐藏的
el
,而不是
hack
很好的答案,我很感激!