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