2009-07-30 7 views
5

W moim rozumieniu odniesienie do dowolnego elementu DOM w jQuery za pośrednictwem znaku dolara (na przykład: $("#mydiv")) zwraca obiekt.Jak mogę przypisać właściwość do obiektu jQuery?

szukam dodać dodatkową właściwość do obiektu, takich jak:

$("#mydiv").myprop = "some value"; 

ale to nie wydają się działać. Próbuję zapisać wartość w tym obiekcie, aby móc odwołać się do niego później.

Poniższy kod daje mi wartość undefined nawet natychmiast po ustawieniu właściwości.

$("#mydiv").myprop = "some value"; 
alert($("#mydiv").myprop); 

ten kod nie działa albo:

$("#mydiv")["myprop"] = "some value"; 
alert($("#mydiv").myprop); 

Czy istnieje sposób, aby osiągnąć ten cel? Czy muszę przechowywać wszystkie moje właściwości jako atrybuty obiektu DOM przez $("#mydiv").attr("myprop", "some value") (jest to znacznie mniej pożądane).

Dzięki!

+0

Nie sądzę, że możesz to zrobić ... może musisz iść z ostatnim oświadczeniem ... – Jason

Odpowiedz

13

jQuery odsłania koncepcję worka na nieruchomość metodą data.

// set some arbitrary data 
$('#selector').data('example-property', exampleValue); 

// get the value later 
var theValue = $('#selector').data('example-property') 

Pozwala to uniknąć manipulacji DOM, które mogą być kosztowne pod względem wydajności.

+0

ooohhh .... miło. – seth

+0

dziękuję bardzo! właśnie tego szukałem! :) –

1

Funkcja $ tworzy obiekt jquery, który reprezentuje element dom. Możesz zmienić atrybuty obiektu, ale zmiany te nie zostaną wstawione w element, który "reprezentuje", chyba że jquery wie, co z nimi zrobić (może przypisać obsługę zdarzeń kliknięcia).

Kiedy dokonujesz pierwszego wyboru, modyfikuje on zrobiony obiekt, ale nie robi nic z faktycznym elementem html. Po ponownym uruchomieniu $ tworzy on obiekt SEPARATE, który nie zachowuje zmiany atrybutu wprowadzonej w pierwszym.

może być w stanie do bezpośredniej zmiany przedmiotu html:. (Bez jQuery)

getElementById ("theid") myprop = "Hello World";

w wyniku czego: <p id="theid" myprop="hello world"></p> ale ustawienie atrybutu obiektu jquery po prostu tego nie zrobi. Aby uzyskać równoważny efekt w jquery, użyj metody .data, którą zasugerował Ken Browning. (znowu za późno ...): D

+0

dziękuję bardzo. to dobrze wiedzieć, ale nie do końca tego, czego szukałem. głosuje w górę. –

1

Nie jestem pewna, czy jest to spowodowane zmianą w jQuery. Ale zrobiłem to prawie tak, jak to opisano w pytaniu ...

var domElem = $('#selector'); 
domElem.myProp = "Hello world"; 

Teraz w moim przypadku muszę korzystać z tego obiektu w wywołaniu metody później:

<span onclick=\"SelectAll(domElem)\">Click me!</span> 

Metoda może wtedy zrobić tak:

function SelectAll(domElm){ 
    alert(domElm.myProp); 
} 

Jak powiedziałem - może to być aktualizacja w silniku jQuery, ale wydaje się, że połączenie .data() nie jest już potrzebne :-)