views:

268

answers:

3

hello my code is something like this

//css
li{display:inline-block}

//html #li margin and width are dynamic
<ul>
<li style='margin:30px;width:100px;'>Pic</li>
<li style='margin:40px;width:200px;'>Pic</li>
<li style='margin:10px;width:500px;'>Pic</li>
<li style='margin:50px;width:300px;'>Pic</li>
</ul>

how to make a jquery function that will take an li index as an input and it will return the width of all li from the beginning to that index + margins ' left + right '

Examples // something like this   
myFunction(1); //output 440 (( 30 margin-left [0] + 30 margin-right [0] + 40 margin-left [1] + 40 margin-right [1] + 100 width [0] + 200 width [1] )) 

myFunction(2); //output 960 (( 30 margin-left [0] + 30 margin-right [0] + 40 margin-left [1] + 40 margin-right [1] + 10 margin-left [2] + 10 margin-right [2] + 100 width [0] + 200 width [1] + 500 width [2] )) 
+2  A: 

You're looking for outerWidth(true)

for example

$('li:eq(0)').outerWidth(true)

if you dont want the margin, but only want the padding and border, just do outerWidth()

So you can just add up the li's outerWidth's normally to get the sum of them all.

Alex Sexton
this output the outWidth for 1 element, but i want my function to output the sum from the first element to that element, you got what i mean ?Thanks A lot for helping
From.ME.to.YOU
@From.ME.to.YOU: Alex Sexton has shown you the door but you need to open it yourself.
anddoutoi
the door has been opened :D thanks Alex
From.ME.to.YOU
A: 
//adapt selectors to get only the ul you want
function calculate(i)  {
  if(i >= $("ul").size()) {
    alert("This index doesn't exist");
    return;
  }
  var sum = 0;
  for(var j=0; j<=i; j++) {
    sum = sum + $("ul li:eq("+j+")").outerWidth(true);
  }
  alert("li's width for index "+i+" is "+sum)
}
jitter
A: 
$.fn.sumOuterWidth = function(useMargins) {
  var sum = 0;
  this.each(function() { 
    sum += $(this).outerWidth(useMargins);
  });
  return sum;
};

// example sum the width of the first 2 li's:
$('ul li').slice(0,2).sumOuterWidth(true) 

// Also gets the sum of the width of the first 2 li's:
$('ul li:eq(1)').prevAll().andSelf().sumOuterWidth(true);
gnarf