Как я могу проверить объект jQuery?

В jQuery 1.4.4, если я это сделаю в консоли Google Chrome:

var divs = $('div');

... то, что я получаю, похоже, является массивом элементов DOM. Но я знаю, что это должен быть объект jQuery, потому что я могу связать его с jQuery:

divs.hide('slow').show('slow'); // etc

То, что я хочу увидеть, это объект jQuery, с свойством .fn, перечисляющим все его методы и т.д. Я почти уверен, что имел обыкновение видеть это.

Если я создаю свой собственный объект, например:

var foo = {species: 'marmot', flavor: 'lemon'}

... Я могу вникнуть в его свойства в консоли.

Как я могу проверить объект jQuery в консоли?

Кроме того, что делает магия, чтобы сделать это похожим на массив?

Обновление - это изменило

Если я загружаю старую версию jQuery - например, скопируйте и вставьте ее в мою консоль на пустой вкладке:

http://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js

... и я тогда сделаю это:

var divs = $('div');

... Я вернусь jQuery.fn.jQuery.init, который я могу вставить в консоль. Так что с тех пор что-то определенно изменилось.

Ответ 1

Я верю, что этот сайт описывает то, что вы ищете, но подытоживая (по ссылке):

Интересная вещь о jQuery объект состоит в том, что, хотя его тип данных объект, он имеет подобный массиву характеристики:

  • его имена свойств (те, которые относятся к элементам DOM, по крайней мере) Числовой
  • имеет свойство length

И: $('div').toSource(); Изменить: Работает только в FF Должно быть то, что вы хотите для отображения свойств объекта.

Для Chrome: alt text

В принципе, вы переходите в Javascript Console в Chrome. Перейдите на вкладку "Сценарии" (# 1). Поместите точку останова на том месте, где вы хотите проверить код (# 2). Затем запустите script и, когда он сломается на этом месте, проверьте переменные области видимости (# 3). В частности, раздел __proto__.

Ответ 2

Это не отвечает на ваш вопрос очень удовлетворительным образом, но может помочь вам, в зависимости от того, что вам нужно:

Я заметил, что если вы сделаете объект менее "похожим на массив", то Chrome будет записывать его так же, как для объекта без массива (т.е. с расширяемым деревом свойств).

Один из способов сделать его менее массивным - предоставить свойство length нечисловое значение:

var divs = $('div');
divs.length = "foo";
console.log(divs);

p.s. Вероятно, вы захотите вернуть объект length обратно к исходному значению перед его повторным использованием.

Ответ 3

Я нашел эту функцию проверки онлайн один раз и никогда не оглядывался назад. Однако это не jQuery:/

function inspect(obj, maxLevels, level)
{
  var str = '', type, msg;

    // Start Input Validations
    // Don't touch, we start iterating at level zero
    if(level == null)  level = 0;

    // At least you want to show the first level
    if(maxLevels == null) maxLevels = 1;
    if(maxLevels < 1)     
        return '<font color="red">Error: Levels number must be > 0</font>';

    // We start with a non null object
    if(obj == null)
    return '<font color="red">Error: Object <b>NULL</b></font>';
    // End Input Validations

    // Each Iteration must be indented
    str += '<ul>';

    // Start iterations for all objects in obj
    for(var property in obj)
    {
      try
      {
          // Show "property" and "type property"
          type =  typeof(obj[property]);
          str += '<li>(' + type + ') ' + property + 
                 ( (obj[property]==null)?(': <b>null</b>'):('')) + '</li>';

          // We keep iterating if this property is an Object, non null
          // and we are inside the required number of levels
          if((type == 'object') && (obj[property] != null) && (level+1 < maxLevels))
          str += inspect(obj[property], maxLevels, level+1);
      }
      catch(err)
      {
        // Are there some properties in obj we can't access? Print it red.
        if(typeof(err) == 'string') msg = err;
        else if(err.message)        msg = err.message;
        else if(err.description)    msg = err.description;
        else                        msg = 'Unknown';

        str += '<li><font color="red">(Error) ' + property + ': ' + msg +'</font></li>';
      }
    }

      // Close indent
      str += '</ul>';

    return str;
}

Также console.log(obj) классный, но я недавно нашел еще одну очень крутую функцию. Попробуйте console.dir(obj), затем в консоли вы увидите, что ваш объект будет красивой структурой типа node, которую вы сможете посмотреть на всех уровнях глубины. Попробуйте

console.dir(String)
// or  
obj = {'this' : 'that', 'one' : [2,3,4,5], 'A' : {} }; console.dir(obj)