Отображать контейнер, если выбран класс [дубликат]

* означает принимать переменные аргументы как список

** означает принимать переменные аргументы в качестве словаря

Используется как:

1) single **

def bar(**kwargs):
    for key in kwargs:
        print(key, kwargs[key])

bar(dic1="two", dic2=3)

Выход:

dic1 two
dic2 3
32
задан David 16 January 2010 в 11:38
поделиться

6 ответов

Это поведение было выбрано, потому что в противном случае jQuery будет регулярно генерировать исключения NullReference

. Почти все функции jQuery возвращают объект jQuery в качестве обертки вокруг элементов Dom, поэтому вы можете использовать точечную нотацию.

$("#balloon").css({"color":"red"});

Теперь представьте, что $("#balloon") возвратил null . Это означает, что $("#balloon").css({"color":"red"}); выдаст ошибку, вместо того, чтобы молча делать ничего, как вы ожидали.

Следовательно, вы просто должны использовать .length или .size().

49
ответ дан James Donnelly 24 August 2018 в 04:52
поделиться
  • 1
    Я тоже думал, что это одна из причин. Но действительно ли это хорошая идея, чтобы подавить ошибки таким образом? Если идентификатор не найден, я бы точно хотел знать, где ошибка вызывается вместо отладки каждой цепочки. – David 16 January 2010 в 16:41
  • 2
    Это может быть поведение, которое вы хотите, если вы используете селектор id, поскольку идентификаторы (обычно) уникальны. Но что, если вы используете селектор классов, чтобы закрыть все диалоги / всплывающие окна на странице. Вы не хотите, чтобы функция выдавала ошибку только потому, что у пользователя не было открываемых диалогов. Вы бы хотели, чтобы он молча ничего не делал. – Dan 17 January 2010 в 13:59
  • 3
    JavaScript не имеет ничего, что называется исключением NullReference. Возможно, вы имеете в виду ReferenceError? – Tim Down 17 January 2010 в 15:15
  • 4
    Я согласен с ошибкой, если какой-то элемент не существует. Солидный код генерирует исключения и исключения. :) К сожалению, jQuery - не наш лучший друг. – emyller 27 September 2011 в 18:56

Он возвращает true, потому что для Javascript это определенный объект, поэтому не false, и jQuery всегда будет давать вам новый объект независимо от того, найден ли этот элемент или нет - однако длина массива будет равна нулю, например

$("span").length

Если у вас нет <span>, это будет ноль, но может быть 1 или более.

Вы можете написать свой собственный плагин, чтобы избежать повторения if, как плагин JQuery, как я сделал для этот . Это довольно легко сделать:

(function($)
{
        /* Checks if a jQuery object exists in the DOM, by checking the length of its child elements. */
        $.fn.elementExists = function()
        {
                ///     <summary>
                ///     Checks if a jQuery object exists in the DOM, by checking the length of its child elements.
                ///     </summary>
                ///     <returns type="Boolean" />
                return jQuery(this).length > 0;
        };
})(jQuery);

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

if ($("#someid").elementExists())
{

}
3
ответ дан Chris S 24 August 2018 в 04:52
поделиться

Это как раз работает jQuery.

$("#something")

Объект 0 = div # something length = 1 jquery = 1.2.6

$("#nothing")

Длина объекта = 0 jquery = 1.2.6

8
ответ дан kjagiello 24 August 2018 в 04:52
поделиться

Вы можете приблизиться к тому, что хотите, обратившись к длине элемента, и объединитесь с тернарным оператором:

console.log(!!$('#notfound').length);  // false
console.log(!!$('#exists').length);    // true
var element= $('#notfound').length ? $('#notfound') : $('#exists');
console.log(element.attr('id'));  // outputs 'exists'

. В центре вопроса:

Не было бы более логичным, если бы селектор идентификаторов возвращал null, если не был найден?

Нет, не для способа JQuery делать вещи, а именно для поддержки цепочки операторов JQuery:

    $('#notfound').hide("slow", function(){
      jQuery(this)
        .addClass("done")
        .find("span")
          .addClass("done")
        .end()
        .show("slow", function(){
          jQuery(this).removeClass("done");
        });
    });

Несмотря на то, что notfound не существует, этот код будет работать без остановки выполнения скрипта. Если начальный селектор возвращает null, вам нужно будет добавить блок if / then для проверки нулевого значения. Если методы addClass, find, end и show возвращают null, вам нужно будет добавить блок if / then, чтобы проверить статус возврата каждого из них. Цепочка - отличный способ обработать поток программ на динамически типизированном языке, таком как Javascript.

5
ответ дан leepowers 24 August 2018 в 04:52
поделиться

Короче говоря, вы можете вспомнить возвращаемое значение селектора jQuery как группу, содержащую 0..n элементов, но никогда не являющуюся нулевым.

Вероятно, вы действительно заинтересованы в $("#two")[0], который даст вам первый фактический элемент, возвращаемый селектором.

0
ответ дан miek 24 August 2018 в 04:52
поделиться

Вы можете проверить свойство .length объекта jQuery. Например:

if($("#two").length > 0) { // exists...

} else { // doesn't exist

}
2
ответ дан vrutberg 24 August 2018 в 04:52
поделиться
  • 1
    Это хорошо. На самом деле он может быть сокращен: if ($("#two").length) должен делать трюк. – miek 16 January 2010 в 14:58
Другие вопросы по тегам:

Похожие вопросы: