如何使用 jQuery 测量元素宽度

发布于 2024-12-18 14:55:14 字数 433 浏览 0 评论 0原文

我有一个恼人的错误,我忘记了为什么会发生:

我有一个普通的 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();

I am having an annoying bug that I forgot why it happens:

I have an ordinary html list

<ul> <li>Some text</li> <li>Another Text </li> <li>text</li> <li>another one</li> </ul>

and I am trying to measure each li width

I was trying to write this jQuery code:

for (var i=0; i++; i <4)
{
   $("ul li")[i].width();
}

but somehow that doesn't work - what am I doing wrong in this sentence $("ul li")[i].width(); ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

谁人与我共长歌 2024-12-25 14:55:14
$('ul li').each(function(){
     /*width*/
     console.log( $(this).width());
     /*width+padding*/
     console.log( $(this).outerWidth(true));
});
$('ul li').each(function(){
     /*width*/
     console.log( $(this).width());
     /*width+padding*/
     console.log( $(this).outerWidth(true));
});
黎歌 2024-12-25 14:55:14
$('ul li').each(function()
{
    $(this).width();
});

使用 .each()< 遍历一组元素要简单得多/a> 函数。

$('ul li').each(function()
{
    $(this).width();
});

This is far more simple to walk over a set of elements with the .each() function.

如梦亦如幻 2024-12-25 14:55:14

要在自定义循环中使用,您需要使用 .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..
})

For use in a custom loop, you need to use the .eq() method (and you should cache the list of element, instead of re-searching for all of them)

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..
}

or you can use the .each() to iterate over the list

$("ul li").each(function(){
   var elementWidth = $(this).width();
   // do what you need with it..
})
放我走吧 2024-12-25 14:55:14

$("ul li")[i] 返回的是 DOM 元素,而不是 jQuery 对象。使用:

var elements = $("ul li");
elements.each(function(){
    //do something with $(this).width()
});

另请注意,在循环外部使用选择器一次,然后对其进行迭代,而不是每次都重复选择。

$("ul li")[i] is returning you a DOM element, not a jQuery object. Use:

var elements = $("ul li");
elements.each(function(){
    //do something with $(this).width()
});

Note also, using the selector once outside the loop and them iterating over it, rather than repeating the selection every time.

微暖i 2024-12-25 14:55:14

当您将索引器与 jquery 对象一起使用时,您将获得 DOM 元素。

尝试:

var $items = $("ul li");
for (var i=0; i < 4; i++)
{
   $items.eq(i).width();
}

When you use an indexer with a jquery object, you get the DOM elements.

try:

var $items = $("ul li");
for (var i=0; i < 4; i++)
{
   $items.eq(i).width();
}
歌入人心 2024-12-25 14:55:14

访问 jQuery 对象上的数组项将返回实际的 DOM 对象,而不是用 jQuery 的糖包裹的对象。请改用 $(...).eq(0).width()

另外,您可以只使用 each() 方法来迭代所有项目,而不是使用 for 循环,恕我直言,这更容易、更美观、更优雅。

Accessing array items on jQuery objects will return you the actual DOM object, not the one wrapped with jQuery's sugar. Use $(...).eq(0).width() instead.

Also, you can just use the each() method to iterate over all the items instead of a for loop, which is much easier, nicer-looking and elegant IMHO.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文