Как я могу назначить свойство для объекта jQuery?

Насколько я понимаю, ссылка на любой элемент 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 ответа

Решение

JQuery раскрывает концепцию собственности мешок с data метод.

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

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

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

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

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

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

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

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

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

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

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

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

Вы можете внести непосредственное изменение в объект HTML: (без jquery)

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

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

Другие вопросы по тегам