Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get DIV width and height in javascript

I'm trying to get the div width and height as the user changes it and submit that number to another page. I can't seem to figure out how to get the width and height though.

<script>
$(function() {
  $( "#set div" ).draggable({ 
    stack: "#set div",
    preventCollision: true,
    containment: $('#main_content'),
      stop: function(event, ui) {
          var mydiv = document.getElementById("set");
          var pos_x = ui.offset.left;
          var pos_y = ui.offset.top;

          var width = mydiv.style.width;        ----THIS DOESN'T WORK
          var height = mydiv.style.height;      ----THIS DOESN'T WORK

          var window_width = window.innerWidth;
          var window_height = window.innerHeight;
          var need = ui.helper.data("need");

          console.log(pos_x);
          console.log(pos_y);
          console.log(width);
          console.log(window_width);
          console.log(need);

          //Do the ajax call to the server
          $.ajax({
              type: "POST",
              url: "updatecoords.php",
              data: { x: pos_x, y: pos_y, need_id: need, width: width, height: height, window_width: window_width, window_height: window_height}
            }).done(function( msg ) {
              alert( "Data Saved: " + msg );
            });  
      }
  });
});
</script>

What's the proper way to do this?

like image 807
user2362601 Avatar asked May 09 '13 21:05

user2362601


1 Answers

It's quite wrong to use ele.style.width to get the element's width!!!!!!

In native JavaScript, you can get a element's CSS through two ways:

Standard Method

window.getComputedStyle(ele)

For example,

var ele = document.getElementById("content"), // Do not use #
    eleStyle = window.getComputedStyle(ele);
/* Below is the width of ele */
var eleWidth = eleStyle.width;

IE(IE 8 And Before)

element.currentStyle

For example,

var ele = document.getElementById("content"), // Do not use #
    eleStyle = ele.currentStyle;
/* Below is the width of ele */
var eleWidth = eleStyle.width;

Why Not Use ele.style?

ele.style is just get the attribule style of ele. If you use ele.style.width, you just get the width of ele.style, not the real width of ele.

If you have done something like:

ele.style.width = "55px"

You get "55px" when using ele.style.width. If you haven't, you will get undefined.

How To Do In jQuery?

Use $ele.width() (if you want the "exact" width, use $ele.outWidth()), jQuery has done everything for you.

like image 105
Daidai Avatar answered Sep 22 '22 14:09

Daidai