Ответ 1
Моим любимым является расширение jQuery с помощью этого крошечного удобства:
$.fn.exists = function () {
return this.length !== 0;
}
Используется как:
$("#notAnElement").exists();
Более явный, чем использование длины.
Каков наилучший способ определить, возвращает ли jQuery-селектор пустой объект. Если вы выполните:
alert($('#notAnElement'));
вы получаете [object Object], так что теперь я делаю это:
alert($('#notAnElement').get(0));
который будет писать "undefined", и поэтому вы можете сделать чек для этого. Но это кажется очень плохим. Какой еще способ?
Моим любимым является расширение jQuery с помощью этого крошечного удобства:
$.fn.exists = function () {
return this.length !== 0;
}
Используется как:
$("#notAnElement").exists();
Более явный, чем использование длины.
if ( $("#anid").length ) {
alert("element(s) found")
}
else {
alert("nothing found")
}
Селектор возвращает массив объектов jQuery. Если совпадающие элементы не найдены, он возвращает пустой массив. Вы можете проверить .length
коллекции, возвращенной селектором, или проверить, является ли первый элемент массива "undefined".
Вы можете использовать любые следующие примеры внутри оператора IF, и все они дают одинаковый результат. Правда, если селектор нашел соответствующий элемент, в противном случае будет false.
$('#notAnElement').length > 0
$('#notAnElement').get(0) !== undefined
$('#notAnElement')[0] !== undefined
Мне нравится делать что-то вроде этого:
$.fn.exists = function(){
return this.length > 0 ? this : false;
}
Итак, вы можете сделать что-то вроде этого:
var firstExistingElement =
$('#iDontExist').exists() || //<-returns false;
$('#iExist').exists() || //<-gets assigned to the variable
$('#iExistAsWell').exists(); //<-never runs
firstExistingElement.doSomething(); //<-executes on #iExist
Мне нравится использовать presence
, вдохновленный Ruby on Rails:
$.fn.presence = function () {
return this.length !== 0 && this;
}
Пример:
alert($('#notAnElement').presence() || "No object found");
Я нахожу его выше предлагаемого $.fn.exists
, потому что вы все еще можете использовать логические операторы или if
, но более правдоподобный результат. Другой пример:
$ul = $elem.find('ul').presence() || $('<ul class="foo">').appendTo($elem)
$ul.append('...')
Мои предпочтения, и я понятия не имею, почему это еще не в jQuery:
$.fn.orElse = function(elseFunction) {
if (!this.length) {
elseFunction();
}
};
Используется следующим образом:
$('#notAnElement').each(function () {
alert("Wrong, it is an element")
}).orElse(function() {
alert("Yup, it not an element")
});
Или, как он выглядит в CoffeeScript:
$('#notAnElement').each ->
alert "Wrong, it is an element"; return
.orElse ->
alert "Yup, it not an element"
Это в документации JQuery:
http://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-exists/
alert( $( "#notAnElement" ).length ? 'Not null' : 'Null' );