2012-06-07 11 views
28

Okej, normalnie uważam się za pośredniego użytkownika jquery, ale wydaje mi się, że jest to bardzo noobowy problem, którego nie jestem pewien.Funkcja wywołująca na selektorze jquery

Mam jeden element div, który chcę uruchomić funkcję przeciwko. Jedynym sposobem, jestem świadomy, jak to zrobić, to coś jak ...

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

To wydaje się nieco więcej pracy, kiedy wiem, że będzie tylko jeden element. Próbowałem tego ...

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

... ale to wypisze całą dom. Chcę tylko uruchomić funkcję na tym jednym elemencie. Jak mogę to zrobić?

+1

'DoStuff ($ ("# divname")); '? – Sampson

+0

@ Jonathan Sampson. LoL, Moja odpowiedź byłaby dokładnie taka sama, gdyby nie było limitu odpowiedzi na 30 znaków ... :) – gdoron

+0

@gdoron To właściwie nie jest najlepsze podejście. Zapobiega on używaniu 'doStuff' jako wywołania zwrotnego później w innych iteracjach jQuery, ponieważ odwołujesz się do parametru zamiast" this ". Zobacz moją odpowiedź dla szczegółów. – Sampson

Odpowiedz

17

Jeśli utrzymują, że każdy element w HTML DOM posiada unikalne id oznacza, że ​​żadne dwa elementy mają taką samą id, następnie $('#divname') zawsze zwraca pojedynczy element i $('#divname').each() potrwa jeden raz. nie więcej niż jeden.

Teraz w przypadku, gdy chcesz coś

dosomething($('#divname')); 

Na przykład:

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

doSomething($('#divname')); 

DEMO

22

Należy call funkcję, przekazując swój element, którego przedmiotem są:

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

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

Ze względu na sposób zbudowaliśmy i nazywają doStuff, nadal możemy użyć go jako zwrotnej .each:

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

Fiddle: http://jsfiddle.net/jonathansampson/WuyJc/

Powiązane problemy