อะไรคือความแตกต่างระหว่าง width, innerWidth และ outerWidth, height, innerHeight และ outerHeight ใน jQuery


125

ฉันเขียนตัวอย่างเพื่อดูว่าอะไรคือความแตกต่าง แต่แสดงผลลัพธ์เดียวกันสำหรับฉันสำหรับความกว้างและความสูง

<html>
    <head>
        <script type="text/javascript" src="jquery.js"></script>
        <script type="text/javascript">
            $(document).ready(function(){
                var div = $('.test');
                var width = div.width(); // 200 px
                var innerWidth = div.innerWidth(); // 200px
                var outerWidth = div.outerWidth(); // 200px

                var height = div.height(); // 150 px
                var innerHeight = div.innerHeight(); // 150 px
                var outerHeight = div.outerHeight(); // 150 px
            });

        </script>
        <style type="text/css">
            .test
            {
                width: 200px;
                height: 150px;
                background: black;
            }
        </style>
    </head>
    <body>
        <div class="test"></div>
    </body>
</html>

ในตัวอย่างนี้คุณจะเห็นว่าผลลัพธ์เดียวกัน หากใครทราบว่าอะไรคือความแตกต่างโปรดแสดงคำตอบที่เหมาะสม

ขอบคุณ


8
คุณดูเอกสาร jQuery หรือไม่
Brad M

1
ลองเพิ่มช่องว่างขอบและระยะขอบให้กับของคุณ<div>และดูว่าจะให้ผลลัพธ์ที่แตกต่างกันหรือไม่)
Niet the Dark Absol

4
api.jquery.com/category/dimensions หน้านั้นจะอธิบายข้อมูลทั้งหมดและหากคุณคลิกแต่ละหน้าจะให้ข้อมูลเพิ่มเติม
JClaspill

ฉันค้นหาใน Google แล้ว แต่ไม่มีคำตอบใดที่ตรงกับความคาดหวังของฉัน
zajke

@BradM - ไม่มีผู้ชาย แต่ผลลัพธ์สำหรับ "ความแตกต่างระหว่างความกว้าง innerWidth, outerWidth jquery" ไม่มีอะไรบอกฉันในสิ่งจำเป็น
zajke

คำตอบ:


282

คุณเห็นตัวอย่างเหล่านี้หรือไม่? ดูเหมือนคำถามของคุณ

ทำงานกับความกว้างและความสูง

ใส่คำอธิบายภาพที่นี่

jQuery - ขนาด

jQuery: ความสูงความกว้างด้านในและด้านนอก


1
คำตอบที่ดีที่สุด
เบนจามิน

ฉันเพิ่งโพสต์คำตอบไว้ด้านล่างตั้งแต่ตอนนี้ฉันเห็นพฤติกรรมที่แตกต่างกันระหว่างสองตัวเลือกที่ไม่ได้อนุมานจากคำอธิบายของคุณ
GWorking

16

ตามที่กล่าวไว้ในความคิดเห็นเอกสารจะบอกคุณอย่างชัดเจนว่าความแตกต่างคืออะไร แต่โดยสรุป:

  • innerWidth / innerHeight - รวมช่องว่างภายใน แต่ไม่รวมขอบ
  • outerWidth / outerHeight - รวมถึง padding, border และ optionally margin
  • ความสูง / ความกว้าง - ความสูงขององค์ประกอบ (ไม่มีช่องว่างขอบไม่มีขอบไม่มีขอบ)

4
  • width = รับความกว้าง

  • innerWidth = รับความกว้าง + ช่องว่างภายใน

  • outerWidth = รับความกว้าง + ช่องว่าง + เส้นขอบและเลือกระยะขอบ

หากคุณต้องการทดสอบเพิ่มช่องว่างระยะขอบขอบให้กับชั้นเรียน. test ของคุณแล้วลองอีกครั้ง

อ่านเพิ่มเติมในเอกสาร jQuery ... ทุกสิ่งที่คุณต้องการมีอยู่มากมาย


3

ดูเหมือนว่าจำเป็นต้องบอกเกี่ยวกับการกำหนดค่าและเปรียบเทียบเกี่ยวกับความหมายของพารามิเตอร์ "width" ใน jq: (สมมติว่า new_value กำหนดไว้ในหน่วย px)

jqElement.css('width',new_value);
jqElement.css({'width: <new_value>;'});
getElementById('element').style.width= new_value;

คำแนะนำสามคำสั่งไม่ได้ให้ผลเหมือนกัน เนื่องจากคำสั่ง jquery แรกกำหนดความกว้างภายในขององค์ประกอบไม่ใช่ "ความกว้าง" นี่เป็นเรื่องยุ่งยาก

เพื่อให้ได้เอฟเฟกต์เดียวกันคุณต้องคำนวณ paddings ก่อน (สมมติว่า var เป็นแผ่นอิเล็กโทรด) คำสั่งที่เหมาะสมสำหรับ jquery เพื่อให้ได้ผลลัพธ์เช่นเดียวกับ js บริสุทธิ์ (หรือพารามิเตอร์ css 'width') คือ:

jqElement.css('width',new_value+pads);

นอกจากนี้เรายังสามารถสังเกตได้ว่าสำหรับ:

var w1 = jqElement.css('width');
var w2 = jqelement.width();

w1 คือ innerwidth ในขณะที่ w2 คือความกว้าง (ความหมายของแอตทริบิวต์ css) ความแตกต่างซึ่งไม่ได้บันทึกไว้ในเอกสาร JQ API

ขอแสดงความนับถืออย่างสูง

เพิ่มเป็น 3 เท่า


หมายเหตุ: ในความคิดของฉันสิ่งนี้ถือได้ว่าเป็นจุดบกพร่อง JQ 1.12.4 วิธีที่จะออกไปข้างนอกควรจะแนะนำรายการพารามิเตอร์ที่ยอมรับสำหรับ. css ('พารามิเตอร์', ค่า) อย่างชัดเจนเนื่องจากมีความหมายที่หลากหลายอยู่เบื้องหลัง 'พารามิเตอร์' ยอมรับซึ่งมีความสนใจ แต่ต้องชัดเจนเสมอ สำหรับกรณีนี้: 'innerwidth' จะไม่ได้มีความหมายเหมือนกับ 'width' เราสามารถค้นหาเส้นทางของปัญหานี้ได้ในเอกสารของ. width (value) ด้วยประโยค: "โปรดทราบว่าในเบราว์เซอร์สมัยใหม่คุณสมบัติความกว้าง CSS ไม่รวมช่องว่างภายใน"


บิดเพิ่ม: .css('width')เป็นเช่นเดียวกับ.outerWidth()(นั่นคือมันรวมถึงชายแดนเช่นเดียวกับช่องว่างภายใน) box-sizing: border-box;เมื่อ
Bob Stein

0

เห็นด้วยกับคำตอบทั้งหมดที่ให้ไว้ข้างต้น เพียงเพื่อเพิ่มในแง่ของหน้าต่างหรือผู้innerWidth/ innerheightมีโอกาสเป็นลูกค้าเบราว์เซอร์รวมถึงพื้นที่เนื้อหาของหน้าต่างเท่านั้นไม่มีอะไรอื่นนอกจาก

outerWidth/ outerHeight รวมถึงพื้นที่เนื้อหาของ windows และนอกจากนี้ยังรวมถึงสิ่งต่างๆเช่นแถบเครื่องมือแถบเลื่อน ฯลฯ ... และค่าเหล่านี้จะเท่ากับหรือมากกว่าค่า innerWidth / innerHeight เสมอ

หวังว่าจะช่วยได้มากกว่านี้ ...


0

สิ่งที่ฉันเห็นตอนนี้คือinnerWidthมีเนื้อหาทั้งหมด

นี่คือถ้าหน้าต่างเป็น900pxและเนื้อหา1200px(และมีการเลื่อน)

  • innerWidth ให้ฉัน 1200px
  • outerWidth ให้ฉัน 900px

ไม่คาดคิดโดยสิ้นเชิงในสายตาของฉัน

* ในกรณีของฉันเนื้อหาอยู่ในไฟล์ <iframe>

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