jQuery เทียบเท่ากับการรับบริบทของ Canvas


155

ฉันมีรหัสการทำงานต่อไปนี้:

ctx = document.getElementById("canvas").getContext('2d');

มีวิธีเขียนใหม่เพื่อใช้$หรือไม่ การทำเช่นนี้ล้มเหลว:

ctx = $("#canvas").getContext('2d');

คำตอบ:


282

ลอง:

$("#canvas")[0].getContext('2d');

jQuery แสดงองค์ประกอบ DOM จริงในดัชนีตัวเลขซึ่งคุณสามารถใช้ฟังก์ชัน JavaScript / DOM ปกติ


13

ฉันเห็นด้วยเช่นกันว่าบ่อยครั้งที่ต้องการใช้. get (0) เพื่ออ้างอิงเป้าหมาย jquery เป็นองค์ประกอบ HTML:

var myCanvasElem = $("#canvas").get(0);

อาจช่วยหลีกเลี่ยงการอ้างอิงวัตถุ null ใด ๆ ที่เป็นไปได้เนื่องจาก jquery ส่งคืน null เป็นวัตถุ แต่การทำงานกับองค์ประกอบจาก. get (0) อาจไม่ล้มเหลวอย่างเงียบ ๆ ... คุณสามารถตรวจสอบได้อย่างง่ายดายว่าผ้าใบถูกค้นพบก่อนหรือไม่ ) ชอบ

if( $("#canvas").length ) ctx = $("#canvas").get(0).getContext('2d');
else console.log('Error: Canvas not found with selector #canvas');

1
try{ 
   ctx = $('#canvas').get(0).getContext('2d');
}catch(e){ 
    console.log('We have encountered an error: ' + e);
}

หรือ...

if( typeof $('#canvas') === 'undefined'){ 
    var canvas = '<canvas id="canvas"><\/canvas>';
    $('body').append(canvas);
}
setTimeout( function(){ ctx = $('#canvas').get(0).getContext('2d'); }, 500);

การใช้ setTimeout เป็นวิธีที่ง่ายเพื่อให้แน่ใจว่าคุณจะไม่ลองเรียกองค์ประกอบ Canvas ก่อนที่จะสร้างและลงทะเบียนกับ DOM อย่างสมบูรณ์


คำถามนี้ถูกถามเมื่อ 8 ปีก่อนที่คุณจะตอบ ตรวจสอบวันที่ที่ถูกถามก่อนตอบรับ!
Rojo

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