【问题标题】:Jquery width() through iteration?Jquery width() 通过迭代?
【发布时间】:2010-10-25 18:07:24
【问题描述】:

我在迭代和检索 width() 值时遇到了一些麻烦。

$(".MyClass").each(
    function () {
        elemWidth = $(this).width();
    });

所以对于每个“MyClass”元素,我想找到宽度(有些是不同的)。

但是上面的代码只产生了 MyClass 的第一个实例的 width() 并在之后返回 0。

关于能够获得 MyClass 的每个实例的宽度的任何想法?

【问题讨论】:

  • 在回复您对 TM 的评论时,我们必须查看您的 HTML(可能还有 CSS)才能解决问题。请提供复制问题所需的代码(或将其托管在jsbin.com),以便我们为您提供帮助。

标签: javascript jquery width each


【解决方案1】:
var widths = [];
$('.MyClass').each(function() {
    widths.push($(this).width());
}); 

应该可以正常工作。如果您显示更多代码,我可能会找出问题所在。

更新:

你什么时候运行这个方法?您是等到 DOM 准备好,还是立即执行它?如果没有,浏览器可能还没有完成所有这些元素的渲染。

如果你还没有,试试这个:

var widths = [];
$(document).ready(function() {
    $('.MyClass').each(function() {
        widths.push($(this).width());
    }); 
});

【讨论】:

  • 不幸的是,这并没有成功。它们对我的代码来说并不多——我在页面上有大约 20 个 MyClass 实例(有些具有不同的宽度),我想获得每个实例的宽度。虽然这个方法确实将初始宽度值推入了数组——随后的值都是 0。我通过用 text() 切换 width() 来检查这一点—— text() 输出每个类的原始内容;另一方面,宽度参数只是不会超过定义第一个值。谢谢斯拉维克。
  • 您是在页面上立即运行,还是等到 DOM 加载完毕?请参阅我刚刚对我的答案所做的更新。
【解决方案2】:

使用map 而不是each 来简化您的代码:

$('.MyClass').map( function() {
    return $(this).width();
});

【讨论】:

  • 谢谢你们——感谢你们两个:)
猜你喜欢
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2021-10-20
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多