Czytam jquery documentation of plugin authoring i jestem do tego dobrze zaznajomiony. Jednak podane przykłady zawsze działają na zbiorze wcześniej dopasowanych elementów. Chcę utworzyć funkcję, która może zrobić zarówno:Jak ustawić funkcję wtyczki jQuery do samodzielnego użycia, która nie działa w kolekcji
// example usage of my to-be-created plugin function
// this is the way described in the docs, and I know how to do that
$("a").myFunction()
// but I also want to be able to call the function without a collection:
$.myFunction();
Jeśli $.myFunction()
nazywa bez kolekcji działać dalej, by stworzyć swój własny zbiór jakie elementy, aby dopasować - rodzaj procesu inicjalizacji (ale niekoniecznie uruchom tylko raz). Ponadto, $.myFunction()
powinna zachowywać łatwość łańcuchowania.
pseudokod, co chcę osiągnąć:
// [...]
function myFunction(): {
if (notCalledOnACollection) {
// this should run when called via $.myFunction()
$elements = $("a.myClass");
}
else {
$elements = $(this);
}
return $elements.each (function() {
// do sth. here
});
}
naprawdę chciałbym, aby zachować wszystkie funkcje realizacji/funkcjonalności w obrębie jednej definicji funkcji, a nie dwa oddzielnie nazwie funkcji lub dwóch jednakowo nazwanych działa w dwóch osobnych miejscach wewnątrz obiektu jQuery.
I oczywiście można dodać parametr myFunction (do_init)
wskazującą co gałąź rachunku if
do wykonania, ale to by zaśmiecać moją listę argumentów (Chcę użyć tego podejścia do wielu wtyczek, a tam będzie argumentes do myFunction()
że Właśnie opuściłem tutaj dla uproszczenia).
Jakieś dobre sugestie?
mam poważne problemy z roztworu. Powtórzyłem twoje podejście do jsfiddle: http://jsfiddle.net/pnpbU/ Ale gdy uruchomię '$ .myPlugin()', wszystkie testowane przeglądarki zużywają 100% procesora i utkną (testowane z FF na Linuxie i Windowsie , Safari na Macu). – Dyna
Nie widzę tego problemu na moim komputerze. A w tej chwili jestem na dinozaurie. Poza tym, jsfiddle nie powinno być używane do testowania wydajności, mają oni załadowaną grupę dodatków. Testowałem też lokalnie i również nie widziałem problemu. Naprawdę wątpię, że twoje widzenie ma coś wspólnego z tym kodem. – Donamite
Czy odkomentowaliście linię w js części jsfiddle? Inaczej nie będzie działać! Obecnie jestem na uniwersytecie i mam dostęp do mnóstwa komputerów. Mogę odtworzyć zużycie 100% procesora na 3 fizycznie różnych maszynach. Użycie http://jsfiddle.net/pnpbU (z usunięciem komentarza z ostatniego wiersza) i naciśnięcie run spowoduje zablokowanie/zakończenie skryptu w Fedorze 17: Firefox 14.0.1, Chrome 22; Windows 7: Firefox 14, IE9; OS X Lion: Safari 5, Firefox 14. Jest * zdecydowanie * odtwarzalny. Nie ma to nic wspólnego z jsfiddle, kopiowanie tego skryptu razem z jQuery 1.8.0 i uruchamianie pokazuje ten sam efekt. – Dyna