2012-06-10 48 views
1

我有一个容器,其宽度为980像素,包含内嵌块元素。每个元素的宽度和高度均为140px,这意味着每行/行可以包含7个元素,然后再向下推送到下一行/行。根据元素数计算行数

<div id="container"><div id="ele1"></div><div id="ele2"></div><div id="ele3"></div><div id="ele4"></div><div id="ele5"></div><div id="ele6"></div><div id="ele7"></div><div id="ele8"></div><div id="ele9"></div><div id="ele10"></div><div id="ele11"></div><div id="ele12"></div><div id="ele13"></div><div id="ele14"></div></div> 

知道元素的数量,我该如何用JavaScript(而不是jQuery)来确定哪个行/行以及元素所在的列?我需要能够对任意数量的元素执行此操作,因为数字是动态的,并且不是由脚本设置的。

回答

2

这可能工作:

column = Number(yourNumber) % 7 
row = Math.floor(Number(yourNumber)/7) 

此假设你开始0,则第一个元素是(0,0)

+0

你可能想'Math.floor(行)'。 –

+0

ty,我加了你的建议;起初我很小心,不要侮辱OP的智慧,;-) – Tom

+0

你不需要'Math.floor'这个'column' mod('%')操作总是返回一个整数。 –

2

如果你知道从0,1开始元素的数量。 ..然后使用下面的代码:

function getRowColNoFor(elementNo) { 
    var col = elementNo % 7; 

    return { 
     col: col, 
     row: (elementNo - col)/7 
    }; 
} 
+1

+1很好的使用'对象'。 –

+0

我刚刚测试过这个,你实际上不能从一个对象内部执行'this.col'。例如:'var a = {a:12,b:this.a + 1}',这会返回'{a:12,b:NaN}'。 –

+0

我不使用表btw ... –

0

如果你知道你将有跨越,你可以划分元素的号码(从0开始)由7得到它的位置7元。

如果将元素的数字除以7,则“整数”值为行,其余为列。

因此,要在网格中的位置,你可以这样做:

function getPositon(index) { 
    return { 
     row: Math.floor(index/7), 
     column: index % 7 
    }; 
} 

DEMO:http://jsfiddle.net/UVZ5f/1/