如何使用jQuery测量元素宽度
How to measure an elements width with jQuery
我有一个烦人的错误,我忘记了为什么会发生:
我有一个普通的html列表
<ul> <li>Some text</li> <li>Another Text </li> <li>text</li> <li>another one</li> </ul>
我正在尝试测量每个li宽度的
我试着写这个jQuery代码:
for (var i=0; i++; i <4)
{
$("ul li")[i].width();
}
但不知何故,这不起作用——$("ul li")[i].width();
这句话我做错了什么?
$('ul li').each(function(){
/*width*/
console.log( $(this).width());
/*width+padding*/
console.log( $(this).outerWidth(true));
});
$('ul li').each(function()
{
$(this).width();
});
使用.each()
函数遍历一组元素要简单得多。
要在自定义循环中使用,需要使用.eq()
方法(并且应该缓存元素列表,而不是重新搜索所有元素(
var li_elements = $("ul li");
for(var i=0, len = li_elements.length; i<len; i++) {
var elementWidth = li_elements.eq(i).width();
// do what you need with it..
}
或者您可以使用.each()
来迭代列表
$("ul li").each(function(){
var elementWidth = $(this).width();
// do what you need with it..
})
$("ul li")[i]
返回的是DOM元素,而不是jQuery对象。用途:
var elements = $("ul li");
elements.each(function(){
//do something with $(this).width()
});
还要注意,在循环外使用选择器一次,然后他们对其进行迭代,而不是每次都重复选择。
当您将索引器与jquery对象一起使用时,您将获得DOM元素。
尝试:
var $items = $("ul li");
for (var i=0; i < 4; i++)
{
$items.eq(i).width();
}
访问jQuery对象上的数组项将返回实际的DOM对象,而不是用jQuery的糖包装的对象。请改用$(...).eq(0).width()
。
此外,您只需使用each()
方法来迭代所有项目,而不是使用for
循环,这更容易、更好看、更优雅的IMHO。
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 在函数中添加数组元素的数值
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 将视口底部滚动到元素底部
- 测量元素和窗口边距之间的长度
- 测量 HTML 5 画布元素上的角度
- 使用CTRL+SHIFT+R与F5重新加载时,元素测量的宽度不同
- 如何测量HTML元素的宽度
- 测量子模板中的目标元素并传递给全局函数
- 如何使用jQuery测量元素宽度
- 隐藏了溢出的DOM元素及其子元素,DOM可以测量高度/宽度
- 在内容完全加载后测量元素的高度