*
означает принимать переменные аргументы как список
**
означает принимать переменные аргументы в качестве словаря
Используется как:
1) single **
def bar(**kwargs):
for key in kwargs:
print(key, kwargs[key])
bar(dic1="two", dic2=3)
Выход:
dic1 two
dic2 3
Это поведение было выбрано, потому что в противном случае jQuery будет регулярно генерировать исключения NullReference
. Почти все функции jQuery возвращают объект jQuery в качестве обертки вокруг элементов Dom, поэтому вы можете использовать точечную нотацию.
$("#balloon").css({"color":"red"});
Теперь представьте, что $("#balloon")
возвратил null . Это означает, что $("#balloon").css({"color":"red"});
выдаст ошибку, вместо того, чтобы молча делать ничего, как вы ожидали.
Следовательно, вы просто должны использовать .length
или .size()
.
Он возвращает 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())
{
}
Это как раз работает jQuery.
$("#something")
Объект 0 = div # something length = 1 jquery = 1.2.6
$("#nothing")
Длина объекта = 0 jquery = 1.2.6
Вы можете приблизиться к тому, что хотите, обратившись к длине элемента, и объединитесь с тернарным оператором:
console.log(!!$('#notfound').length); // false
console.log(!!$('#exists').length); // true
var element= $('#notfound').length ? $('#notfound') : $('#exists');
console.log(element.attr('id')); // outputs 'exists'
. В центре вопроса:
Не было бы более логичным, если бы селектор идентификаторов возвращал null, если не был найден?
blockquote>Нет, не для способа 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.
Короче говоря, вы можете вспомнить возвращаемое значение селектора jQuery как группу, содержащую 0..n элементов, но никогда не являющуюся нулевым.
Вероятно, вы действительно заинтересованы в $("#two")[0]
, который даст вам первый фактический элемент, возвращаемый селектором.
Вы можете проверить свойство .length
объекта jQuery. Например:
if($("#two").length > 0) { // exists...
} else { // doesn't exist
}
if ($("#two").length)
должен делать трюк.
– miek
16 January 2010 в 14:58
ReferenceError
? – Tim Down 17 January 2010 в 15:15