วิธีค้นหาความกว้างของ div โดยใช้ vanilla JavaScript


267

คุณจะค้นหาความกว้างปัจจุบันของ a <div>ในเบราว์เซอร์ที่ทำงานร่วมกันได้โดยไม่ต้องใช้ไลบรารี่อย่าง jQuery ได้อย่างไร?


104
+1 สำหรับความคิดเห็น "no jQuery" :)
Zlatko

1
มีความเป็นไปได้ที่ซ้ำกันของการทำความเข้าใจ offsetWidth, clientWidth, scrollWidth และ -Height ตามลำดับ (ซึ่งถูกถามในภายหลังมาก แต่ก็ยังมีคำตอบที่ซับซ้อนมากกว่านี้ )

คำตอบ:


400
document.getElementById("mydiv").offsetWidth

8
หรืออย่างcientWidthนั้นฉันก็ไม่รู้ความแตกต่างที่แท้จริง
JCOC611

123
offsetWidthรวมถึงความกว้างชายแดนclientWidthไม่
lincolnk

1
เมื่อ myDiv ไม่มีกฎ CSS แต่มีการกำหนด "ความกว้าง" และ "ความสูง" ในแท็ก offsetWidth จะส่งกลับความกว้างหลัก ไม่ใช่ปัญหาฉันเพิ่งเพิ่มกฎ CSS และทำงานได้ดี
ปล้น

offsetHeight เท่ากับศูนย์ใน IE11
nim

4
@nim ถ้า div ของคุณมีdisplay: noneหรือไม่เป็นส่วนหนึ่งของเอกสารมันจะมีความสูงออฟเซ็ตเป็นศูนย์เสมอ
Andy E


9

คำตอบทั้งหมดถูกต้อง แต่ฉันยังต้องการให้ทางเลือกอื่นที่อาจใช้ได้

หากคุณกำลังมองหาความกว้างที่กำหนดไว้ (ไม่สนใจการเติมเต็มระยะขอบและอื่น ๆ ) คุณสามารถใช้ได้

getComputedStyle(element).width; //returns value in px like "727.7px"

getComputedStyle อนุญาตให้คุณเข้าถึงสไตล์ทั้งหมดขององค์ประกอบนั้น ตัวอย่างเช่น: padding, paddingLeft, margin ขอบบนซ้ายรัศมีและอื่น ๆ


4

คุณยังสามารถค้นหา DOM โดยใช้ ClassName ตัวอย่างเช่น:

document.getElementsByClassName("myDiv")

นี่จะส่งคืนอาร์เรย์ หากมีสถานที่ให้บริการหนึ่งที่คุณสนใจตัวอย่างเช่น:

var divWidth = document.getElementsByClassName("myDiv")[0].clientWidth;

divWidth ตอนนี้จะเท่ากับความกว้างขององค์ประกอบแรกในอาร์เรย์ div ของคุณ


2

document.getElementById("mydiv") ที่จริงแล้วคุณไม่จำเป็นต้องใช้
คุณสามารถใช้รหัสของ div เช่น:

var w = mydiv.clientWidth;
หรือ
var w = mydiv.offsetWidth;
อื่น ๆ


1

ตัวเลือกอื่นคือการใช้ฟังก์ชัน getBoundingClientRect โปรดทราบว่า getBoundingClientRect จะส่งกลับ rect ที่ว่างเปล่าหากการแสดงผลขององค์ประกอบคือ 'none'

var elem = document.getElementById("myDiv");
if(elem) {
   var rect = elem.getBoundingClientRect();
   console.log(rect.width);  
}

0

วิธีการโทรด้านล่างใน div หรือ body tag onclick = "show (event);" ฟังก์ชั่นแสดง (เหตุการณ์) {

        var x = event.clientX;
        var y = event.clientY;

        var ele = document.getElementById("tt");
        var width = ele.offsetWidth;
        var height = ele.offsetHeight;
        var half=(width/2);
       if(x>half)
        {
          //  alert('right click');
            gallery.next();
        }
        else
       {
           //   alert('left click');
            gallery.prev();
        }


    }

0

วิธีที่ถูกต้องในการคำนวณสไตล์กำลังรอจนกว่าหน้าจะถูกเรนเดอร์ สามารถทำได้ในลักษณะดังต่อไปนี้ ให้ความสนใจกับการหมดเวลาในการรับautoค่า

function getStyleInfo() {
    setTimeout(function() {
        const style = window.getComputedStyle(document.getElementById('__root__'));
        if (style.height == 'auto') {
            getStyleInfo();
        }
        // IF we got here we can do actual business logic staff
        console.log(style.height, style.width);
    }, 100);
};

window.onload=function() { getStyleInfo(); };

ถ้าคุณใช้เพียง

window.onload=function() {
    var computedStyle = window.getComputedStyle(document.getElementById('__root__'));
}

คุณสามารถรับautoค่าความกว้างและความสูงได้เนื่องจากเบราว์เซอร์ไม่แสดงผลจนกว่าจะโหลดเต็ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.