• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Selektor jQuery wyszukiwanie tylko jednego elementu

0 głosów
217 wizyt
pytanie zadane 12 września 2017 w JavaScript, jQuery, AJAX przez kevin Gaduła (4,680 p.)

Witam!

Mam takie pytanie odnośnie wyszukiwania obiektów poprzez jQuery. Mam umieszczonych w div'ie kilka elementów które mają ustawione user-data na pewną wartość, te elementy znajdują się tylko i wyłącznie w tym div'ie więc będę szukał tego z odpowiednią wartością tylko i wyłącznie w tym div'ie. Mogę to zrobić na dwa sposoby tylko pytanie który który jest lepszy, chodzi mi o sytuacje aby jeżeli ten element z konkretną wartością zostanie znaleziony to funkcja zaprzestaje działania i nie szuka już dalej.

1. Selektor jQuery - tego nie jestem pewny czy po znalezieniu tego elementu funkcja zaprzestaje szukania:

  $("#container a[data-index='5']").text("Zmieniono !");

 

2. Selektor jQuery oraz find i each - tutaj to wystarczy zwrócić false aby funkcja zaprzestała szukania, ale minus jest tego taki że wszędzie muszę pisać dłuższy kod:

$("#container").find("a").each( function () {

       if( $(this).data("index") === 5 )
       {
            $(this).text("Znaleziono !");

            return false;
        }
});

 

1 odpowiedź

0 głosów
odpowiedź 12 września 2017 przez rafal612b Nałogowiec (48,660 p.)
edycja 12 września 2017 przez rafal612b

Czysty kod > szybki kod

To dość ważna zasada. Jeśli masz kod który działa szybko ale jest obszerny i niezrozumiały wcześniej czy później skończy się on katastrofą ;)

Kod z each powinien działać wolniej ponieważ jeden i drugi kod pobiera wszystkie elementy.  Kod z each musi wywołać więcej funkcji a i tak przerywasz iterowanie po już znalezionych wszystkich elementach.

Masz jeszcze kilka możliwości przyśpieszenia :D

Jeśli dziecko jest bezpośrednim rodzicem możesz użyć.
 

$("#container > a[data-index='5']")

lub

$("#container").children("a")

Jeśli często wykonujesz tą akcje możesz to troszkę rozbić. Na początku programu zrobić zmienną.

 

var container = $("#container");


a następnie w kodzie wywoływać :
 

container.find("a[data-index='5']")


Ale najlepszym z najlepszych rozwiązań jest zastosowanie natywnej funkcji przeglądowej querySelector która wyszukuje tylko jeden element. Można ją połączyć z jQuery jeśli nie potrafisz czystego JavaScript

 

$(document.querySelector("#container a[data-index='5']"))

 

komentarz 12 września 2017 przez kevin Gaduła (4,680 p.)

Dlaczego var container = $("#container"); przyspieszy działanie ?

komentarz 12 września 2017 przez rafal612b Nałogowiec (48,660 p.)
Bo tylko raz znajdziesz ten element nie będziesz go szukał za każdym razem od nowa. Chodzi o to aby tą zmienną dać gdzieś na samą górę przed wykonaniem twoich skryptów.

Podobne pytania

0 głosów
1 odpowiedź 101 wizyt
pytanie zadane 31 sierpnia 2017 w PHP, Symfony, Zend przez sc4rface Mądrala (6,630 p.)
0 głosów
1 odpowiedź 222 wizyt
0 głosów
1 odpowiedź 72 wizyt
pytanie zadane 3 maja 2017 w JavaScript, jQuery, AJAX przez UltraSF Stary wyjadacz (11,550 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

66,985 zapytań

113,890 odpowiedzi

241,339 komentarzy

46,942 pasjonatów

Przeglądających: 204
Pasjonatów: 8 Gości: 196

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...