Являются ли объекты jQuery фактическими объектами DOM? Правильно ли добавлять свойства к ним?

0

Через этот вопрос я узнал здесь, что есть и отрицательные стороны в расширении объектов DOM. Можно ли сделать что-то вроде следующего?

var tr = $('<tr>');
tr.myCustomProperty = 'Some string value';

Я знаю, что в jQuery существует метод .data(), но с ним лучше работать. Я также задаюсь вопросом, содержит ли моя переменная tr фактический элемент DOM DOM или любой другой объект.

  • 3
    Нет, они являются объектами jquery. в тот момент, когда вы повторно выбираете tr или используете метод, который генерирует новый объект jquery, свойство теряется.
  • 0
    Нет, по существу, $ ('<tr>') - это функция, имя которой равно "$", а параметр - "<tr>". Это не объект DOM
Теги:
dom

2 ответа

2
Лучший ответ

jQuery обрабатывает объекты DOM в специальном массиве с именем jQuery. Вы можете думать об этом как о массиве элементов DOM, который расширен, чтобы иметь все методы jQuery.

Вы можете получить доступ к элементу DOM в вашем примере следующим образом:

tr[0]

но все причины не хранить данные таким образом все еще применяются.

Как упоминал @Kevin B, нехорошо делать то, что вы пытаетесь сделать (расширение объекта jQuery), потому что вы потеряете пользовательские свойства при каждой повторной инициализации.

3

Кевин неверен. Вы можете хранить что-то в TR в большинстве браузеров, выполняя следующие действия:

var tr = $('tr').eq(0); // get a single TR from the DOM
var actualElement = tr[0]; // get the actual element object from the jQuery object
actualElement.myCustomProperty = 'Some string value';
  • 4
    Заявление Кевина верно. Диего добавил свойство в объект jQuery. Это - как писал Кевин - плохая идея.
  • 0
    Ваш путь решения указанной проблемы, хотя и правильный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню