js获取隐藏元素宽高的实现方法
狼蚁网站SEO优化长沙网络推广带来了一种新的方法:获取隐藏元素的宽度和高度。对于许多网络开发者来说,这是一个非常有价值的技巧。长沙网络推广在此分享给大家,希望能够给大家提供一些参考。
我们先来谈谈一种常见的现象。在某些情况下,使用JavaScript获取隐藏元素的宽度和高度可能会遇到困难。例如在一些嵌套的HTML结构中,即使元素本身被设置为隐藏状态,其内部的子元素也可能无法获取到正确的尺寸信息。针对这种情况,我们需要一种更有效的方法来解决这个问题。
解决这个问题的思路是:首先找到需要获取尺寸的元素及其所有隐藏的祖先元素(包括自身),直到body元素为止。然后获取这些元素的style属性中的display和visibility属性,以便稍后恢复它们的状态。接着,我们将这些隐藏元素设置为visibility:hidden和display:block !important状态(使用important是为了确保样式设置的优先级)。之后我们就可以获取该元素的宽度和高度了。我们恢复所有隐藏元素的display和visibility属性,并返回元素的宽高值。
下面是这个方法的代码实现:
```javascript
function getSize(id){
var width, height, elem = document.getElementById(id);
var noneNodes = [], nodeStyle = {}; // 存储隐藏元素和它们的样式属性
// 获取多层嵌套的隐藏元素
getNoneNode(elem);
// 保存这些元素的原始样式属性
setNodeStyle();
width = elem.clientWidth; // 获取元素的宽度
height = elem.clientHeight; // 获取元素的高度
// 恢复所有隐藏元素的原始样式属性
resumeNodeStyle();
return {width: width, height: height}; // 返回宽高对象
function getNoneNode(node){
var display = window.getComputedStyle(node).display; // 获取元素的display属性值
var tagName = node.nodeName.toLowerCase(); // 获取元素的标签名(小写形式)
if(display !== 'none' && tagName !== 'body'){ // 如果元素不是隐藏的并且不是body标签
getNoneNode(node.parentNode); // 继续向上查找祖先元素中的隐藏元素
} else {
noneNodes.push(node); // 如果是隐藏的或到达body标签,将元素添加到noneNodes数组中
if(tagName !== 'body') getNoneNode(node.parentNode); // 继续向上查找隐藏元素(排除body标签)
}
}
// 设置和恢复节点样式的函数实现略...(根据实际需求进行实现)
}
```
获取元素样式的函数
```javascript
function getStyles(elem) {
// 支持旧版IE和Firefox浏览器
var view = elem.ownerDocument.defaultView;
if (!view || !view.opener) {
view = window;
}
return view.getComputedStyle(elem); // 返回元素的计算样式
}
```
设置节点样式的函数
在DOM中,有些元素可能因为各种原因被隐藏。为了正确获取这些隐藏元素的尺寸,我们需要先保存它们的显示属性,然后再恢复它们。下面的函数可以帮助我们做到这一点。
```javascript
function setNodeStyle() {
var noneNodes = document.querySelectorAll('[style="display:none"]'); // 获取所有隐藏的元素
for (var i = 0; i < noneNodes.length; i++) {
var node = noneNodes[i]; // 当前处理的元素节点
var styleAttr = node.getAttribute("style"); // 获取元素的style属性字符串
var visibility = node.style.visibility; // 保存元素的visibility属性
在世界的某个角落,隐匿着一种神秘的元素,等待着被发现,被理解。此刻,它如同一个未解之谜,静静地等待着我们去揭开它的面纱。此刻,让我们共同聚焦于此,这个神秘之地的真实面貌。
在这里,我们身处的场景犹如一个古老而神秘的画卷,每一笔都蕴含着丰富的故事与历史。在这幅画卷中,一切都是那么的和谐而生动。而现在,随着时间的推移,这幅画卷即将呈现出一幅全新的景象。此刻,我们即将见证一个全新的时代——Cambrian时代。
此刻,让我们共同Cambrian时代背后的故事。在这个时代里,一切都是那么的鲜活而富有活力。这是一个充满无限可能的时代,每一个细节都充满了生机与活力。在这里,我们将见证一个全新的世界,一个充满未知的世界。在这个世界里,每一个细节都将被重新定义,每一个想法都将被赋予新的意义。在这里,我们将感受到生命的力量与奇迹。这是一个值得我们去的时代。现在让我们一起揭开它的神秘面纱吧!让我们共同见证这个时代的辉煌与壮丽!它将为我们带来无尽的惊喜与感动!让我们共同见证这个时代的来临吧!它将为我们开启一个全新的世界大门!让我们一起走进这个神秘的世界吧!感受它带给我们的震撼与感动!让我们一起见证Cambrian时代的辉煌!让我们一起期待未来的到来吧!让我们共同迎接这个充满无限可能的未来吧!此刻的我们仿佛站在时间的交汇点上,感受着过去与未来的交融与碰撞。让我们一起期待这个充满生机与活力的Cambrian时代吧!
编程语言
- js获取隐藏元素宽高的实现方法
- javascript相关事件的几个概念
- PHP实现仿Google分页效果的分页函数
- 小程序兼容安卓和IOS数据处理问题及坑
- angular1配合gulp和bower的使用教程
- jQuery带时间的日期控件代码分享
- JavaScript生成验证码并实现验证功能
- NODEJS基于FFMPEG视频推流测试
- React-Native之定时器Timer的实现代码
- JS基于myFocus库实现各种功能的tab选项卡切换效果
- 一个仿微博登陆邮箱提示框js开发案例
- @ResponseBody 和 @RequestBody 注解的区别
- ASP.NET MVC 导出Word报表
- vue项目中应用ueditor自定义上传按钮功能
- JavaScript中闭包的详解
- vue中的router-view组件的使用教程