Как я могу назначить свойство для объекта 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