Я всегда задавался вопросом, почему jQuery возвращает true, если я пытаюсь найти элементы по селектору id, который не существует в структуре DOM.
Вот так:
<div id="one">one</div>
<script>
console.log( !!$('#one') ) // prints true
console.log( !!$('#two') ) // is also true! (empty jQuery object)
console.log( !!document.getElementById('two') ) // prints false
</script>
Я знаю, что могу использовать !!$('#two').length
с длиной === 0, если объект пуст, но мне кажется логичным, что селектор вернет элемент, если он найден, иначе null
(например, родной document.getElementById
делает).
F.ex, эта логика не может быть выполнена в jQuery:
var div = $('#two') || $('<div id="two"></div>');
Не было бы более логичным, если бы селектор идентификаторов возвращал null, если не найден?
кто-нибудь?