Wybierz elementy według atrybutu

Mam kolekcję checkboxów z wygenerowanymi identyfikatorami, a niektóre z nich mają dodatkowy atrybut. Czy można użyć JQuery, aby sprawdzić, czy element ma określony atrybut? Na przykład, Czy mogę 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 jak Mogę uzyskać zbiór wszystkich pól wyboru, które mają ten atrybut, bez sprawdzania jeden po drugim? Czy to możliwe?

Author: Martin G, 2009-07-08

13 answers

Czy masz na myśli, czy możesz je wybrać? Jeśli tak, to tak:

$(":checkbox[myattr]")
 188
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 11:45:56
if ($('#A').attr('myattr')) {
    // attribute exists
} else {
    // attribute does not exist
}

EDIT:

Powyższe pole spadnie do gałęzi else - Gdy myattr istnieje, ale jest pustym łańcuchem lub "0". Jeśli jest to problem, powinieneś testować na undefined:

if ($('#A').attr('myattr') !== undefined) {
    // attribute exists
} else {
    // attribute does not exist
}
 360
Author: Stefan Gehrig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 12:27:20

Wiem, że minęło sporo czasu odkąd zadano pytanie, ale okazało się, że czek jest jaśniejszy w ten sposób:

if ($("#A").is('[myattr]')) {
    // attribute exists
} else {
    // attribute does not exist
}

(Jak znaleźć na tej stronie tutaj)

Dokumentacja o jest można znaleźć tutaj

 166
Author: Jonathan Bergeron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 22:48:58

W JavaScript,...

null == undefined

...zwraca true*. To różnica między == i ===. Ponadto, Nazwa undefined może być zdefiniowana (nie jest to słowo kluczowe jak null jest), więc lepiej sprawdzić w inny sposób. Najbardziej wiarygodnym sposobem jest prawdopodobnie porównanie wartości zwracanej przez operatora typeof.

typeof o == "undefined"

Niemniej jednak, porównanie z null powinno działać w tym przypadku.

* zakładając, że undefined jest w rzeczywistości nieokreślone.

 8
Author: bambams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-21 15:11:08

To zadziała:

$('#A')[0].hasAttribute('myattr');
 7
Author: powermikee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 00:28:35

$("input[attr]").length to może być lepsza opcja.

 5
Author: ssps,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-28 22:29:04

Kilka pomysłów zostało rzuconych wokół za pomocą "typeof", jQuery". is" I".filtr " więc pomyślałem, że opublikuję ich szybkie porównanie perf. Typeof wydaje się być najlepszym wyborem do tego celu. 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.

 4
Author: Daved,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-14 18:42:27
$("input#A").attr("myattr") == null
 1
Author: Mathias F,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-08 11:47:01

Po Prostu:

$('input[name*="value"]')

Więcej informacji: official docs

 1
Author: Kambiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-28 23:31:07
if (!$("#element").attr('my_attr')){
  //return false
  //attribute doesn't exists
}
 1
Author: Fury,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-30 08:28:29

Oprócz zaznaczania wszystkich elementów z atrybutem $('[someAttribute]') LUB $('input[someAttribute]') można również użyć funkcji do sprawdzania logicznego obiektu, np. w programie obsługi kliknięć:

if(! this.hasAttribute('myattr') ) { ...

 0
Author: AaronLS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-28 22:44:46

Stworzyłem pakiet npm z zamierzonym zachowaniem opisanym powyżej.

Link do [npm] i [github]

Użycie jest bardzo proste. Na przykład:

<p id="test" class="test">something</p>
$("#test").hasAttr("class")

Zwraca true.

Działa również z camelcase.
 0
Author: Shoter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 09:59:55

JQuery zwróci atrybut jako łańcuch znaków. Dlatego możesz sprawdzić długość tego łańcucha, aby określić, czy jest ustawione:

if ($("input#A").attr("myattr").length == 0)
 return null;
else
 return $("input#A").attr("myattr");
 -5
Author: zach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 23:24:09