2013-08-10 28 views
7

Dla następującego kodu:TypeError: abc.getAttribute nie jest funkcją

<span class="map-marker" data-lng="101.7113506794"></span> 
    <span class="map-marker" data-lng="101.6311097146"></span> 

    var abc = $('.map-marker:first'); 
    var xyz = abc.getAttribute("data-lat"); 
    console.log(xyz); 

otrzymuję komunikat o błędzie: TypeError: abc.getAttribute is not a function. Co zrobiłem źle?

+2

Spróbuj abc.attr(), nie jestem pewien, czy odniesienie: najpierw będzie punkt poprawnie. Myślę, że lepiej mieć obie rozpiętości w jednym div. – INgeek

+1

Prawdopodobnie literówka, ale twoje przęsła mają atrybut data-lng, a nie atrybut data-lat. – guero64

Odpowiedz

18

Spróbuj może to być:

var abc = $('.map-marker:first')[0]; 
    var xyz = abc.getAttribute("data-lat"); 
    console.log(xyz); 

albo to:

var abc = $('.map-marker:first'); 
    var xyz = abc.data("lat"); 
    console.log(xyz); 
2

Wybierasz wiele elementów. Funkcja select zwraca tablicę, a tablica nie ma funkcji getAttribute. Możesz użyć pętli for do iteracji poprzez wybór i otrzymać wartości atrybutów lub możesz użyć indeksera (na przykład [0]), aby uzyskać atrybut konkretnego.

+0

* "Wybierasz wiele elementów." * Właściwie nie. Pseudo-selektor ': first' redukuje zestaw do jednego elementu. * "Funkcja select zwraca tablicę" * Nie, zwraca obiekt jQuery. * "i błąd nie ma funkcji getAttribute" * Uh? Obiekty jQuery (lub tablice) nie mają metody "getAttribute", to jest poprawne –

+0

Ups, literówka. Miałem na myśli tablicę zamiast błędu. –

+0

Dzięki za ostrzeżenie. Jestem nowy w jQuery, więc jest to rodzaj założenia, ponieważ wynik wyboru $() jest zindeksowany, ma długość i tak dalej, jest tablicą. http://learn.jquery.com/using-jquery-core/jquery-object/ mówi mi, że tak nie jest. Ale czy obiekt jQuery implementuje wszystkie metody tablicy? Nie mogłem go znaleźć w dokumentacji. –

14

abc jest obiektem jQuery, więc nie ma getAttribute() funkcję. ma on funkcję attr().

8

What have I done wrong?

można traktować obiekt jQuery jak element DOM. Obiekty jQuery nie mają metody getAttribute. Możesz zamiast tego użyć .attr lub .data.

3

Twoje próby uzyskania "data-lat", ale masz tylko "dane-lng" zdefiniowane.

Powiązane problemy