Pytanie jQuery .data () Nie aktualizuje DOM


Wygląda na to, że jQuery 1.7.2 nie aktualizuje atrybutów danych DOM dla mnie. Biorąc pod uwagę następujące znaczniki:

<ul id="foo">
    <li data-my-key="12345">ABCDEF</li>
</ul>

Uruchamiając JavaScript poniżej, otrzymuję wyniki, których się nie spodziewam:

$('#foo li:first').data('my-key') // Returns 12345 - Expected
$('#foo li[data-my-key="12345"]') // Returns the expected <li>
$('#foo li:first').data('my-key', '54321')
$('#foo li:first').data('my-key') // Returns 54321 - Expected
$('#foo li[data-my-key="54321"]') // Returns an empty array - Not expected

Po dalszych badaniach zauważyłem, że DOM ma nie zmodyfikowano po ustawieniu nowej wartości za pomocą funkcji .data () (zweryfikowanej przy pomocy "Inspect Element" w Chrome 21.0.1180.81, Firebug 1.10.3 i Firefox 14.0.1).

Zachowanie jest nieoczekiwane z mojej perspektywy, ale czy jest to zamierzony sposób na działanie danych jQuery? Jeśli tak, jaki jest właściwy sposób aktualizowania atrybutów danych * za pomocą jQuery? Po prostu użyj funkcji attr ()?


13
2017-09-07 15:17


pochodzenie


stackoverflow.com/questions/12271362/... - Joseph Silber
@JosephSilber ehhh Naprawdę nie podoba mi się twoja odpowiedź ... - Neal
@Neal - ehhh ... OK. Czemu? - Joseph Silber
@JosephSilber ehhhh idk. nie wygląda na całkowicie koszernego. może mieszanka naszych dwóch odpowiedzi mogłaby być lepsza. - Neal
widzieć api.jquery.com/data/#data-html5 - Daniel Ruf


Odpowiedzi:


$('#foo li[data-my-key="54321"]') jest atrybut selektor.

Za pomocą .data(..) zmienia elementy nieruchomości z których nie można wybrać bez użycia filtra.

Jeśli chcesz dostać wszystko elementy z pewną właściwością możesz to zrobić (używając filter(...)):

$('#foo li').filter(function(index) {
  return $(this).data('my-key') === 54321;
}); //returns all `#foo li` with data[my-key] === 54321

Zobacz tutaj, aby uzyskać więcej informacji: .prop () vs .attr ()


6
2017-09-07 15:18



dlaczego nie prop () bezpośrednio? - Daniel Ruf
@ DanielRuf prop bezpośrednio robić co? - Neal
element (ta sama składnia jak .attr ()) api.jquery.com/prop  czy potrzebuje filtra? - Daniel Ruf
@DanielRuf tak ... lub w jaki sposób wybrałbyś wszystkie elementy o tej samej właściwości danych? - Neal
Cóż, właściwie  .data(..) robi nie zmień właściwości elementu. Jest przechowywany w specjalna pamięć podręczna (w obiekcie jQuery lub - w przypadku węzła DOM - w jQuery.cache). W związku z tym nie rozumiem w jaki sposób .prop () vs .attr () jest tutaj istotny. - Joseph Silber