Потеря данных элемента jQuery при "перемещении" - PullRequest
2 голосов
/ 08 июля 2009

По сути: каждый раз, когда я клонирую элементы, я теряю значение data () для этих элементов.

Длинная история: У меня есть таблица из трех столбцов, в которой хранятся элементы, динамически вводимые из объекта JSON. Каждый из этих элементов имеет набор значений данных, который я использую.

$.getJSON(jsonUrl, null, function(data) {
   jsonData = data.items;
   for (var key in jsonData) {
     lZeroArray.each(function() {
       if ($.trim($(this).text()) == $.trim(jsonData[key].name)) {
         $(this).data("L1", jsonData[key].L1);
       }
     });
   };
 });

есть событие click для этих элементов, которое использует данные JSON, сохраненные как ключ "L1", и они работают нормально, но ...

Я разрешаю фильтровать эти элементы с помощью текстового поля и селектора ": not (: contains ('text'))".

$(".subMenuItem:not(:contains('" + str + "'))").remove();

но ... поскольку у меня три столбца, столбцы могут быть неровными, поэтому я пытаюсь поместить элементы в три столбца путем клонирования оставшихся.

var items = $(".subMenuItem").clone(true);
$("#subMenuContent td").empty();
addItemsToColumn(items);

После этого функции щелчка больше не находят какие-либо значения data (), даже если они работали раньше.

$(".subMenuItem").live("click", function() {
  if ($(this).data("L1")) {
    buildSubMenuItems($(this).data("L1"));
  }
});

Как сохранить значения data (), которые я храню вместе с элементом?

1 Ответ

4 голосов
/ 09 июля 2009

Метод jQuery clone явно удаляет значения data () из клонированных элементов (строка 301 из jQuery v1.3.1):

        // Need to set the expando to null on the cloned set if it exists
        // removeData doesn't work here, IE removes it from the original as well
        // this is primarily for IE but the data expando shouldn't be copied over in any browser
        var clone = ret.find("*").andSelf().each(function(){
            if ( this[ expando ] !== undefined )
                this[ expando ] = null;
        });

Вам нужно будет захватить данные и заново добавить их в клонированные элементы. Имя свойства expando в jQuery не является публичной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...