2012-04-17 16 views
26

Estoy tratando de "seleccionar" una img dentro de un selector $ (this). Sé que puedo encontrarlo usando .find('img'), pero ¿es esto posible:

$("img",this)?

¿Cuál es la forma más óptima de hacerlo?

Originalmente código

<a class="picture" href="test.html"> 
    <img src="picture.jpg" alt="awesome"> 
</a> 
+0

Ambas formas funcionarían igual. No creo que sea significativo llamar a ninguno de los dos "óptimos". – Jon

+1

Por cierto, siempre puedes usar la ciencia: http://jsperf.com/jqslctrtst –

+0

Es cierto, son lo mismo, pero .find() es un poco más rápido que el contexto. http://jsperf.com/jquery-context-find-and-children-selectors/6 http://jsperf.com/jquery-find-vs-context-2/2 – rucsi

Respuesta

55

Cuál es la forma más óptima de hacer esto?

Ambos $(this).find('img') y $('img', this) son equivalentes.

A partir de los documentos:

Internamente, el contexto de selección se lleva a cabo con el método .find(), por lo que $ ('período', esto) es equivalente a $ (this) .find ('lapso ').

http://api.jquery.com/jQuery/

4

Que una perfecta razonablemente forma de hacerlo.

por lo que sería hacer como:

$('a').click(function() { 
    //if the element dosent change you can use this 
    //var src = $('img', this).attr('src'); 
    //else use $(this) 
    var src = $('img', $(this)).attr('src'); 
    alert(src); 
    return false; 
}); 

Ver: http://jsfiddle.net/xYmwV/

En realidad no hay diferencia, ya que en ambos métodos se carga el elemento DOM, y buscarla. Por supuesto su camino es "más limpio" y más simple, pero podría ser más confuso :)

Una forma más rápida sería $(this).children() ya que entonces no tendría que buscar elementos, sino que pasaría directamente a los contraseñas en el DOM. Pero elimina la flexibilidad del script.

+0

A veces necesitas agregar '$ (esto) 'en lugar de' esto', pero básicamente esa es la manera de hacerlo. +1 :) – Phoenix

+0

@Phoenix Sí, tiene sentido llamar al elemento cuando lo busca. ¿Nunca entendiste por qué normalmente no necesitas llamarlo? :/ –

+0

Parece ser que si se mueve dentro/fuera del DOM 'esto' puede cambiar, mientras que '$ '(' this ')' no. http://remysharp.com/2007/04/12/jquerys-this-demystified/ –

0

Estoy tratando de "seleccionar" un img dentro de un selector $ (this).

var myImg = $(this).find("img"); 
2

Sí se puede hacer eso ... de todas formas son equivalentes, por lo que es sólo una cuestión de gustos sintácticas sus '':

Internamente, el contexto de selección se implementa con el método .find(), por lo que $ ('span', this) es equivalente a $ (this) .find ('span').

http://api.jquery.com/jQuery/

1

Realmente no importa, elija lo que prefiera, es principalmente una elección estilística.

jQuery maneja la forma $(selector, context) haciendo $(context).find(selector) o (si context ya es un ejemplo de jQuery) context.find(selector) bajo las sábanas, así que en teoría la forma find es ligeramente más eficiente, pero no de una manera que es muy probable importar.

Cuestiones relacionadas