Mam problem próbujący naprawić konflikt między obiema bibliotekami i użyłem noConflict w niektórych sekcjach, jednak stajemy otrzymywanie błędów $

Specjalizuję się w skryptach po stronie serwera, a nie w JavaScript (ani trochę czasu na przeczytanie pewnej dokumentacji), więc doceniłbym jakąkolwiek pomoc.

Oto mój kod:

Najpierw (po prostu zgaduję tutaj) jQuery dodaje klasę, która zostanie użyta później

jQuery(".paging a:first").addClass("active");

Teraz nadszedł czas, aby użyć tej klasy

var triggerID = $active.attr("rel") - 1; //Get number of times to slide

Ponieważ kod jest dla suwaka, pojawia się błąd za każdym razem, gdy ta linia zostanie osiągnięta, więc moje pytanie jest ... Czy jest jakiś sposób, jaki mogę usunąć $ i nadal używać jQuery w tej linii?

P.S: Używam jQuery 1.6.1 Min i Mootools 1.2 Chociaż wątpię, że jest to istotne, wiem, że mają konflikty tak prawdopodobnie źródło tego błędu.

2
user635022 1 grudzień 2011, 18:49

4 odpowiedzi

Najlepsza odpowiedź

Aby wybrać element według swojej klasy w jQuery, musisz użyć notacji w stylu CSS w obiekcie jQuery, który w swoim przykładzie byłby jQuery(".active"). Spróbuj tego:

var triggerID = jQuery(".active").attr("rel") - 1; //Get number of times to slide

Aby użyć oryginalnego kodu, musisz przypisać zmienną $active być obiektem jQuery zawierającym element, taki jak:

var $active = jQuery(".paging a:first").addClass("active");
var triggerID = $active.attr("rel") - 1; // This will now work, assuming it's in the same scope as the above.
3
Rory McCrossan 1 grudzień 2011, 14:51

W tym przypadku nie ma nic wspólnego z JQuery (choć może być zmienna jQuery). W JavaScript możesz nazwać zmienne "$ coś" bez problemu i nie koliduje z czymś o nazwie po prostu "$", która jest całkowicie zupełnie nazwa zmienna. To jak powiedzenie, że usunęłeś wszystkie odniesienia do zmiennej "samochód", ale nie rozumiesz, dlaczego otrzymasz błąd narzekającym na brak "dywan". Są całkowicie niezależni, więc kod, który wysłałeś, jest niewystarczający, aby zobaczyć, co jest nie tak.

[Edytuj]
Jeśli to brzmiało surowi w jakiś sposób, to tylko mając problem z formułując się w sposób rozumienia w tej sprawie, ponieważ po prostu próbowałem edukować, nie sugerując, że to coś, co powinieneś wiedzieć. To błąd, wiele narodów robi w JavaScript (co najmniej kilka wiem).

1
Alxandr 1 grudzień 2011, 14:54

Powinien być tylko kwestią wymiany $ za pomocą jQuery wszędzie tam, gdzie normalnie użyjesz $.

Więc zamiast typowego:

$('.active').attr('rel')

Posługiwać się:

jQuery('.active').attr('rel')

0
Stephen Watkins 1 grudzień 2011, 14:57

$active jest zmienną JavaScript (wybrali, aby umieścić $, aby pomóc im pamiętać, że przechowuje obiekt jQuery, ale zachowanie jest takie samo).

Tak więc, zastępując każdą instancję $active przez active powinno nadal działać. Nie wiem, jeśli jest jednak rozwiązać twój problem.

Jedna rzecz, którą powinieneś spróbować umieścić swój kod w zamknięciu:

(function($){
    // your code
})(jQuery);

W ten sposób, wewnątrz zamknięcia, $ będzie tylko odniesienie jQuery

0
Pioul 1 grudzień 2011, 14:57