Получение пустого объекта JQuery - PullRequest
115 голосов
/ 22 мая 2009

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

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

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

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

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

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

//Init function.
$(function(){
//Hold the previously selected object for the account type selection.

var Previous = null;  //Here is where I would like to initialize.
                      //something like Previous = $();


$("SELECT[name='AccountType']").change(
    function () {
        //Hide Previous message if there was one.
        if(Previous == null || Previous.size() > 0){ 
            Previous.hide();
        }

        //Show the message if found and save it as previous.
        Previous = $("#"+this.value+"_Msg").show();

        //Get fisrt question
        var FirstQuestion = $(".FirstQuestion");
        if(this.value === ''){
            FirstQuestion.hide();
        }else{
            //Manually show FirstQuestion.
            FirstQuestion.show();
        }
    });
}

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

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

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

Ответы [ 3 ]

213 голосов
/ 22 мая 2009

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

$([])

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

$()
21 голосов
/ 13 сентября 2010
$();

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

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

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

3 голосов
/ 22 мая 2009

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

<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();
      }
    });
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...