2009-07-30 9 views
5

Es ist in meinem Verständnis, dass Verweis auf ein beliebiges DOM-Element in jQuery über das Dollarzeichen (wie folgt: $("#mydiv")) ein Objekt zurückgibt.Wie kann ich einem jQuery-Objekt eine Eigenschaft zuweisen?

Suche eine zusätzliche Eigenschaft auf ein Objekt als solches hinzuzufügen:

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

aber dies nicht zu funktionieren scheint. Ich versuche, einen Wert in diesem Objekt zu speichern, damit ich später darauf verweisen kann.

Der folgende Code gibt mir einen Wert undefined sogar sofort nach dem Festlegen der Eigenschaft.

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

ist dieser Code nicht funktionieren:

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

Gibt es eine Möglichkeit, dies zu erreichen? Oder muss ich alle meine Eigenschaften als Attribute auf dem DOM-Objekt über $("#mydiv").attr("myprop", "some value") speichern (das ist viel weniger wünschenswert).

Danke!

+0

ich glaube nicht, dass Sie das tun können ... müssen Sie vielleicht mit Ihrer letzten Aussage gehen ... – Jason

Antwort

13

jQuery macht das Konzept einer eigenschafts Tasche mit dem data Verfahren.

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

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

Dies vermeidet DOM-Manipulationen, die in Bezug auf die Leistung teuer sein können.

+0

ooohhh .... schön. – seth

+0

vielen Dank! genau das habe ich gesucht! :) –

1

Die $ -Funktion erstellt ein jquery-Objekt, das ein dom-Element darstellt. Sie können die Attribute des Objekts ändern, aber diese Änderungen werden in dem Element, das es darstellt, nicht dargestellt, es sei denn, jquery weiß, was damit zu tun ist (z. B. ein Click-Event-Handler zuweisen).

Also, wenn Sie die erste Auswahl machen, ändert es das Objekt, das Sie gemacht haben, aber tut nichts mit dem tatsächlichen HTML-Element. Wenn Sie $ erneut ausführen, wird ein SEPARATE-Objekt erstellt, das die Attributänderung, die Sie an der ersten vorgenommen haben, nicht beibehält.

Sie können möglicherweise eine direkte Änderung an einem HTML-Objekt machen. (Ohne jquery)

getElementByID ("theid") Myprop = "Hallo Welt";

ergibt: <p id="theid" myprop="hello world"></p> aber ein Attribut eines Objekts jquery Einstellung nur wird es nicht tun. Verwenden Sie die von Ken Browning vorgeschlagene .data-Methode, um den entsprechenden Effekt in jQuery zu erzielen. (Wieder zu spät ...): D

+0

vielen Dank. Das ist gut zu wissen, aber nicht ganz das, wonach ich gesucht habe. stimmt jedoch überein. –

1

Ich bin nicht sicher ob oder nicht, dies ist aufgrund einer Änderung in jQuery. Aber ich habe es so gemacht, wie in der Frage beschrieben ...später in einem Methodenaufruf

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

Jetzt in meinem Fall habe ich auf dieses Objekt verwenden:

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

Verfahren dann wie folgt tun:

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

Wie gesagt - es könnte ein Update in der jQuery-Engine sein, aber es scheint, dass der .data() Aufruf nicht mehr benötigt wird :-)