Как получить размер объекта jQuery - PullRequest
5 голосов
/ 03 декабря 2010

Я сохраняю пары ключ-значение в контейнере div, используя:

$( '#div_id').data( key, value);

В конце мне нужно проверить, хранится ли что-нибудь в этом контейнере div.

Итак, сначалаЯ получаю содержимое по телефону:

var data = $( '#div_id').data();

Затем, чтобы проверить его размер с data.length или data.size.

Но обеих функций не существует.Как я знаю, функция данных в jquery возвращает объект, поэтому я должен иметь возможность получить размер этого объекта.

Как получить размер объекта, возвращаемого функцией данных в jquery?

Ответы [ 4 ]

10 голосов
/ 03 декабря 2010

Объекты не имеют размера. Вы можете посчитать его свойства, хотя:

function getPropertyCount(obj) {
    var count = 0,
        key;

    for (key in obj) {
        if (obj.hasOwnProperty(key)) {
            count++;
        }
    }

    return count;
}

Использование:

alert(getPropertyCount(data));
2 голосов
/ 03 декабря 2010

Не лучшая идея хранить эти пары ключ / значение на этом уровне на объекте / узле.

var data = $( '#div_id').data();

возвращает все данные, которые присоединены к этому node, включая event handlers например, есть любые.

Так что лучшее решение - создать объект, содержащий все ваши данные:

$('#div_id').data('mydata', {});
/* ... */
$('#div_id').data('mydata')[key] = value;

К вашему актуальному вопросу.Простые объекты Javascript не имеют свойства .length.Вы должны проверить это сами, циклически перебирая ключи:

var mylen = 0;
for(var prop in $('#div_id').data('mydata')) {
    mylen++;  
}

Это должно быть улучшено, также проверяя и вызывая метод .hasOwnProperty(), который гарантирует, что текущее свойство не наследуется где-либоПрототип цепи.

1 голос
/ 03 декабря 2010

Знаете ли вы, какие «ключи» вы использовали?если это так, просто проверьте ключи, если нет, вместо этого сохраните объект или массив .

например,

var myStuff = {};
myStuff.date = new Date();
myStuff.name = "Santa Claus";
myStuff.lifeStory = "Once upon a time...";
$('#div_id').data('myData', myStuff);

Затем, когда вам понадобится вернуть его обратно, просто возьмитеэтот один ключ ...

var data = $('#div_id').data('myData');

Имейте в виду, что объекты JavaScript / «Карты» не имеют метода / свойства «длина» или «размер», поэтому, если вам нужно проверить, если этосодержит что-то, общая функция, как это должно работать.

function isObjEmpty(obj){
  for(var i in obj){
    return false;
  }
  return true;
}
0 голосов
/ 03 декабря 2010

Объекты Javascript не имеют свойства длины. Но вы можете легко вычислить его с помощью простой функции jQuery.

$.fn.dataLength = function () {
    var i,
        n = 0,
        t = $(this);
    for (i in t.data()) {
        n += 1;
    }

    return n;
}

Затем используйте его с $ ('# div_id'). DataLength ()

EDIT

Обратите внимание на другие ответы о структуре данных в .data и проверке .hasOwnProperty

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