jQuery equivalente a obtener el contexto de un Canvas


155

Tengo el siguiente código de trabajo:

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

¿Hay alguna forma de reescribirlo para usarlo $? Hacer esto falla:

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

Respuestas:


282

Tratar:

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

jQuery expone el elemento DOM real en índices numéricos, donde puede realizar funciones normales de JavaScript / DOM.


13

También he visto que a menudo se prefiere usar .get (0) para hacer referencia a un objetivo jquery como elemento HTML:

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

Quizás para ayudar a evitar posibles referencias a objetos nulos, ya que jquery devuelve nulo como un objeto, pero trabajar con el elemento de .get (0) puede no fallar tan silenciosamente ... Puede verificar fácilmente si el lienzo se encontró primero antes de .get (0 ) me gusta

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);
}

o...

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

Usar setTimeout es una manera fácil de garantizar que no intente llamar al elemento de lienzo antes de que esté completamente creado y registrado en el DOM.


Esta pregunta se hizo 8 años antes de que contestara. ¡Compruebe la fecha en que se le preguntó antes de responder!
Rojo

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.