Получение пустого объекта JQuery

120

В следующем коде я настраиваю обработчик изменений в поле выбора, чтобы отображать и скрывать некоторые последующие вопросы в зависимости от значения выбора.

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

Чтобы проверить, нужно ли мне скрыть лишнее сообщение, я сохраняю переменную с именем Previous. После выполнения обработчика я проверяю, имеет ли Previous значение null или размер 0.

Было бы неплохо инициализировать Previous пустым объектом JQuery, чтобы не выполнять дополнительную проверку на null.

Выполнение $ () возвращает объект размером 1.

Есть ли способ создать пустой объект JQuery?

// Запускаем функцию.
$ (Функция () {
// Удерживаем ранее выбранный объект для выбора типа счета.

var Previous = null; // Здесь я хотел бы инициализировать.
                      // что-то вроде Previous = $ ();


$ ( "SELECT [имя = 'ВидСчета']"). Изменение (
    function () {
        // Скрыть предыдущее сообщение, если оно было.
        if (Previous == null || Previous.size ()> 0) { 
            Previous.hide ();
        }

        // Показать сообщение, если оно найдено, и сохранить его как предыдущее.
        Предыдущий = $ ("#" + this.value + "_ Msg"). Show ();

        // Получить первый вопрос
        var FirstQuestion = $ (". FirstQuestion");
        if (this.value === '') {
            FirstQuestion.hide ();
        } Еще {
            // Вручную отобразить FirstQuestion.
            FirstQuestion.show ();
        }
    });
}

В худшем случае я мог бы сделать что-то вроде этого:

    var Previous = {size: function () {return 0; }};

но это кажется излишним.

Том Хаббард
источник

Ответы:

222

Это создает пустой jQuery-объект:

$([])

Обновление: в более новых версиях jQuery (1.4+) вы можете использовать:

$()
Magnar
источник
Спасибо. Так какой из них лучше сохранить совместимость с предыдущими и последующими версиями? - Во всяком случае, я до сих пор не могу понять, почему ни один из них не сработал в моем случае. Может быть, мне стоит задать вопрос по этому поводу, но я решил его, используя PHP вместо jQuery, поэтому сейчас я не могу больше углубиться в это.
cregox 02
2
прекрасный тест: $ (). add ($ ("div")). css ('цвет', 'красный');
zloctb
24
$();

Возврат пустого набора

Начиная с jQuery 1.4, вызов jQuery()метода без аргументов возвращает пустой набор jQuery (со .lengthсвойством 0). В предыдущих версиях jQuery это возвращало набор, содержащий узел документа.

Источник: api.jquery.com

Том Хаббард
источник
6
Предоставление ссылки ( api.jquery.com/jQuery/#jQuery1 ) для подтверждения вашего утверждения, вероятно, принесет вам больше взлетов :).
Studgeek
1
Проголосовали за включенный источник. Всегда здорово иметь доступ ко всему контексту. Более прямая ссылка на соответствующий абзац: api.jquery.com/jQuery/#returning-empty-set
ksadowski
3

Мой совет - не делайте этого так. Есть много более простых способов сделать это. Рассматривать:

<select id="select" name="select">
  <option value="msg_1">Message 1</option>
  <option value="msg_2">Message 1</option>
  <option value="msg_3">Message 1</option>
</select>

<div class="msg_1 msg_3">
  ...
</div>

<div class="msg_1">
  ...
</div>

<div class="msg_2">
  ...
</div>

$(function() {
  $("#select").change(function() {
    var val = $(this).val();
    $("div." + val").show();
    $("div:not(." + val + ")").hide();
  });
});

Намного проще. В основном давайте классы, чтобы указать, что показывать и скрывать, и тогда не требуется отслеживания. Альтернатива:

$(function() {
  $("#select").change(function() {
    var val = $(this).val();
    $("div").each(function() {
      if ($(this).hasClass(val)) {
        $(this).show();
      } else {
        $(this).hide();
      }
    });
  });
});
Клетус
источник
-1

попробуй это

 var new = $([]);

Я не очень хороший программист, но он дает пустой объект :))

Бэйн Неба
источник
Вы получаете отрицательные голоса, потому что вы повторили существующий (и очень старый) ответ. Это не добавляет ценности сообществу.
Ишервуд