Как я могу назначить свойство для объекта jQuery? - PullRequest
5 голосов
/ 30 июля 2009

Насколько я понимаю, ссылка на любой элемент DOM в jQuery через знак доллара (например, $("#mydiv")) возвращает объект.

Я хочу добавить дополнительное свойство к объекту как таковое:

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

но это не похоже на работу. Я пытаюсь сохранить значение в этом объекте, чтобы я мог ссылаться на него позже.

Однако следующий код дает мне значение undefined даже сразу после того, как я установил свойство.

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

этот код также не работает:

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

Есть ли способ достичь этого? Или мне нужно хранить все мои свойства как атрибуты объекта DOM через $("#mydiv").attr("myprop", "some value") (это гораздо менее желательно).

Спасибо!

Ответы [ 3 ]

13 голосов
/ 30 июля 2009

jQuery раскрывает концепцию пакета свойств с помощью метода data.

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

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

Это позволяет избежать манипуляций с DOM, которые могут быть дорогими с точки зрения производительности.

1 голос
/ 09 октября 2012

Я не уверен, действительно ли это связано с изменением jQuery. Но я сделал это в значительной степени, как описано в вопросе ...

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

Теперь в моем случае я должен использовать этот объект при вызове метода позже:

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

Затем метод можно сделать так:

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

Как я уже сказал - это может быть обновление в движке jQuery, но кажется, что вызов .data() больше не нужен: -)

1 голос
/ 30 июля 2009

Функция $ создает объект jquery, который представляет элемент dom. Вы можете изменить атрибуты объекта, но эти изменения не будут сделаны видимыми в элементе, который он «представляет», если jquery не знает, что с ними делать (возможно, назначая обработчик события click).

Поэтому, когда вы делаете первый выбор, он изменяет созданный вами объект, но ничего не делает с реальным HTML-элементом. Когда вы снова запустите $, он создаст объект SEPARATE, который не сохранит изменения атрибута, сделанные вами в первый раз.

вы можете внести прямое изменение в html-объект: (без jquery)

getElementByID ("theid"). Myprop = "hello world";

в результате: <p id="theid" myprop="hello world"></p>, но установка атрибута объекта jquery просто не сделает этого. Чтобы получить эквивалентный эффект в jquery, используйте метод .data, предложенный Кеном Браунингом. (опять слишком поздно ...): D

...