Mam kolekcję pól wyboru z wygenerowanymi identyfikatorami, a niektóre z nich mają dodatkowy atrybut. Czy można użyć JQuery do sprawdzenia, czy element ma określony atrybut? Czy mogę na przykład sprawdzić, czy następujący element ma atrybut „myattr”? Wartość atrybutu może się różnić.
<input type="checkbox" id="A" myattr="val_attr">A</input>
Na przykład, w jaki sposób mogę uzyskać kolekcję wszystkich pól wyboru, które mają ten atrybut, bez sprawdzania jeden po drugim? czy to możliwe?
jquery
attributes
Ciprian Grosu
źródło
źródło
$filtered = $collection.filter('[attribute_name]');
Odpowiedzi:
Czy masz na myśli, że możesz je wybrać? Jeśli tak, to tak:
źródło
href
atrybutów.$("#myBox").find('a').filter(':not([href])')
EDYTOWAĆ:
Powyższe spadnie do
else
-gałęzi, jeślimyattr
istnieje, ale jest pustym ciągiem lub „0”. Jeśli jest to problem, powinieneś wyraźnie przetestowaćundefined
:źródło
undefined
jest uważane za przypadek skrajny, a powyższe porównanie zadziała w 99% wszystkich przypadków.Wiem, że minęło dużo czasu, odkąd pytanie zostało zadane, ale okazało się, że czek jest bardziej przejrzysty:
(Jak znaleziono na tej stronie tutaj )
Dokumentacja o to można znaleźć tutaj
źródło
To zadziała:
źródło
$(this).<something>
tutaj, gdy możesz to zrobićthis.hasAttribute('...')
bezpośrednio (i nie przejmuj się oczywiście starszymi przeglądarkami.)W JavaScript ...
... zwraca
true
*. To różnica między==
i===
. Ponadtoundefined
można zdefiniować nazwę (to nie jest słowo kluczowe podobne do „null
is”), więc lepiej sprawdzić w inny sposób. Najpewniejszym sposobem jest prawdopodobnie porównanie wartości zwracanej przeztypeof
operatora.Niemniej jednak porównanie z wartością null powinno działać w tym przypadku.
* Zakładając, że
undefined
w rzeczywistości jest niezdefiniowany.źródło
$("input[attr]").length
może być lepszym rozwiązaniem.źródło
Kilka pomysłów zostało podrzuconych przy użyciu „typeof”, jQuery „.is” i „.filter”, więc pomyślałem, że opublikuję szybkie ich porównanie. Typeof wydaje się najlepszym wyborem do tego. Podczas gdy inne będą działać, wydaje się, że istnieje wyraźna różnica w wydajności podczas wywoływania biblioteki jq dla tego wysiłku.
źródło
źródło
isset()
lub na przykład w js$("#element").attr('my_attr') === false
,jak w tym poście , używając
.is
i selektora atrybutów[]
, możesz łatwo dodać funkcję (lub prototyp):źródło
źródło
po prostu:
więcej informacji: oficjalne dokumenty
źródło
Oprócz wybierania wszystkich elementów z atrybutem
$('[someAttribute]')
lub$('input[someAttribute]')
możesz także użyć funkcji do wykonywania operacji logicznych na obiekcie, na przykład w module obsługi kliknięć:if(! this.hasAttribute('myattr') ) { ...
źródło
Utworzyłem pakiet npm z zamierzonym zachowaniem, jak opisano powyżej w pytaniu.
Link do [npm] i [github]
Użycie jest bardzo proste. Na przykład:
zwraca true.
Działa również z camelcase.
źródło
Aby wybrać elementy posiadające określony atrybut, zobacz powyższe odpowiedzi.
Aby ustalić, czy dany element jQuery ma określony atrybut, używam małej wtyczki, która zwraca,
true
jeśli pierwszy element w kolekcji ajQuery ma ten atrybut:źródło
JQuery zwróci atrybut jako ciąg. Dlatego możesz sprawdzić długość tego ciągu, aby ustalić, czy jest ustawiony:
źródło