How to get margin value of a div in plain JavaScript?

后端 未结 3 808
死守一世寂寞
死守一世寂寞 2020-12-24 02:06

I can get height in jQuery with

$(item).outerHeight(true);

but how do I with JS?

I can get the height of the li with



        
相关标签:
3条回答
  • 2020-12-24 02:32

    Also, you can create your own outerHeight for HTML elements. I don't know if it works in IE, but it works in Chrome. Perhaps, you can enhance the code below using currentStyle, suggested in the answer above.

    Object.defineProperty(Element.prototype, 'outerHeight', {
        'get': function(){
            var height = this.clientHeight;
            var computedStyle = window.getComputedStyle(this); 
            height += parseInt(computedStyle.marginTop, 10);
            height += parseInt(computedStyle.marginBottom, 10);
            height += parseInt(computedStyle.borderTopWidth, 10);
            height += parseInt(computedStyle.borderBottomWidth, 10);
            return height;
        }
    });
    

    This piece of code allow you to do something like this:

    document.getElementById('foo').outerHeight
    

    According to caniuse.com, getComputedStyle is supported by main browsers (IE, Chrome, Firefox).

    0 讨论(0)
  • 2020-12-24 02:33

    The properties on the style object are only the styles applied directly to the element (e.g., via a style attribute or in code). So .style.marginTop will only have something in it if you have something specifically assigned to that element (not assigned via a style sheet, etc.).

    To get the current calculated style of the object, you use either the currentStyle property (Microsoft) or the getComputedStyle function (pretty much everyone else).

    Example:

    var p = document.getElementById("target");
    var style = p.currentStyle || window.getComputedStyle(p);
    
    display("Current marginTop: " + style.marginTop);
    

    Fair warning: What you get back may not be in pixels. For instance, if I run the above on a p element in IE9, I get back "1em".

    Live Copy | Source

    0 讨论(0)
  • 2020-12-24 02:33

    I found something very useful on this site when I was searching for an answer on this question. You can check it out at http://www.codingforums.com/javascript-programming/230503-how-get-margin-left-value.html. The part that helped me was the following:

    /***
     * get live runtime value of an element's css style
     *   http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element
     *     note: "styleName" is in CSS form (i.e. 'font-size', not 'fontSize').
     ***/
    var getStyle = function(e, styleName) {
      var styleValue = "";
      if (document.defaultView && document.defaultView.getComputedStyle) {
        styleValue = document.defaultView.getComputedStyle(e, "").getPropertyValue(styleName);
      } else if (e.currentStyle) {
        styleName = styleName.replace(/\-(\w)/g, function(strMatch, p1) {
          return p1.toUpperCase();
        });
        styleValue = e.currentStyle[styleName];
      }
      return styleValue;
    }
    ////////////////////////////////////
    var e = document.getElementById('yourElement');
    var marLeft = getStyle(e, 'margin-left');
    console.log(marLeft);    // 10px
    #yourElement {
      margin-left: 10px;
    }
    <div id="yourElement"></div>

    0 讨论(0)
提交回复
热议问题