Я работаю над созданием более семантического способа проверки элементов с помощью jQuery. Использование $("#element").length > 0
просто не очень хорошо написано для меня, поэтому я делаю свое собственное селекторное дополнение для использования в .is
:
if($("#element").is(":present")) {
console.log("It aliiiveeee!!");
}
Эта часть была простой, например:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
}
});
Я хочу сделать еще один шаг и упростить, если элемент не существует, используя аналогичный синтаксис:
$.extend($.expr[':'],{
present: function(a) {
return $(a).length > 0;
},
absent: function(a) {
return $(a).length === 0;
}
});
$(function() {
if($("#element").is(":absent")) {
console.log("He dead, Jim.");
}
});
Но эта часть удивительно трудно сделать. Я думаю, это потому, что я обрабатываю возвращаемые элементы, чтобы получить результат, а синтаксический выбор селектора на .length === 0 - это то же самое, что и просить никаких элементов: он возвращает false независимо от того, что.
Я пробовал много разных способов отменить вещи и заставить это возвращать true, когда элемент не существует, и false, если он делает:
return $(a).length === 0;
return !($(a).length > 0);
if(!($(a).length > 0)) {
return true;
}
if($(a).length > 0) {
return false;
} else {
return true;
}
return !!($(a).length === 0);
// etc...
Есть ли простой способ заставить это просто вернуть true, если элемент не существует, а false, если он делает?