如何避免offset()。left的十进制值

时间:2012-01-03 03:08:34

标签: jquery html css

我正在使用<ul>建立一个弹出菜单。

示例:

<ul class="uiMenu">
    <li>One
        <ul>
           <li>Test Child</li>
        </ul>
    </li>
    <li>Two
         <ul>
           <li>Test Child 2</li>
        </ul>
    </li>
    <li>Three</li>
</ul>

因此,菜单left offset的弹出按钮应该是父菜单项offset left的{​​{1}}。

当我通过每个父offset进行迭代时,我注意到偏移量是十进制值。 但是在IE的旧版本中它们不是,为了简单起见,我想避免十进制偏移。

是否有任何想法确保偏移值最终为整数?

Example

5 个答案:

答案 0 :(得分:6)

使用Math.round() / Math.floor()

进行整理/解答
Math.round($(this).offset().left);

答案 1 :(得分:0)

您可以使用 parseInt(offsetValue)方法。这是一个小数点。

答案 2 :(得分:0)

一个简洁的javascript技巧是左移零位将截断任何小数位,实际上与Math.floor()相同 例如,

/* this == 1 */
1.3 << 0;
/* also == 1 */
1.8 << 0;

但是请注意,这在最严格的循环中只有任何好处 - 如果您怀疑Math.floor()的函数表查找和堆栈push / pops实际上花费了您的时间。

只需将其放在此处以供参考。使用Math.round()Math.floor()对您的问题来说将是更正确的答案,因为它更具可读性。

答案 3 :(得分:0)

使用

(文档)$。就绪(函数(){

$('.uiMenu > li').each(function(){

    console.log('offset().left: ' + parseInt($(this).offset().left));
});

});

答案 4 :(得分:-1)

它迭代'uiMenu'中的所有LI元素。为了更好和非冲突的代码。提供顶级标题lis的ID。

<ul class="uiMenu">
    <li class="title">One
        <ul>
           <li>Test Child</li>
        </ul>
    </li>
    <li class="title">Two
         <ul>
           <li>Test Child 2</li>
        </ul>
    </li>
    <li class="title">Three</li>
</ul>

选择.title

进行编码
  $('.title ').each(function(){
          console.log('offset().left: ' + $(this).offset().left);
        });