2012-06-07 19 views
28

De acuerdo, normalmente me consideraría un usuario intermedio de jquery, pero este parece ser un problema muy novato que no estoy seguro de cómo codificar.llamando al selector de jquery

Tengo un div que quiero ejecutar una función en contra. La única manera de que soy consciente de cómo hacer esto es algo así como ...

$("#divname").each(function(){ 
    dostuff(); 
}); 

Este parece ser un poco más de trabajo cuando sé que sólo habrá un elemento. Intenté esto ...

$("#divname", function(){ 
    console.log($(this)); 
}); 

... pero escribe todo el dom. Solo quiero ejecutar la función en este elemento. ¿Cómo puedo hacer eso?

+1

'hacerTarea ($ ("# divname")); ¿? – Sampson

+0

@JonathanSampson. LoL, Mi respuesta hubiera sido exactamente igual si no hubiera 30 caracteres de respuesta límite ... :) – gdoron

+0

@gdoron En realidad, no es el mejor enfoque. Le impide usar 'doStuff' como una devolución de llamada más adelante en otras iteraciones de jQuery ya que se refiere a un parámetro en lugar de' this'. Ver mi respuesta para más detalles. – Sampson

Respuesta

17

Si mantener que cada elemento en HTML DOM tiene id único que significa que no hay dos elementos tienen la misma id, entonces $('#divname') siempre devuelven un solo elemento y $('#divname').each() se ejecutará una vez. no más de uno

Ahora bien, en su caso, usted quiere algo así como

dosomething($('#divname')); 

Por ejemplo:

function doSomething(el) { 
    el.append('<span>hello</span>'); 
} 

doSomething($('#divname')); 

DEMO

22

Usted debe call la función, pasando su elemento como objeto:

function doStuff() { 
    alert($(this).html()); 
} 

doStuff.call($("#foo")[0]); 

Debido a la forma en que construimos y llamamos doStuff, todavía podemos usarlo como una devolución de llamada en .each:

$(".bar").each(doStuff); 

violín: http://jsfiddle.net/jonathansampson/WuyJc/