JQuery push-функция
Я работаю над samsung SDK и модифицирую приложение javascript для умного телевидения. Я наткнулся на этот кусок кода, и я не понимаю, что if($('.menuButton').push()){...
делает. Родная функция push не была перезаписана, но это все еще работает. Я думал, что push добавит элемент в массив, но это не так
if(direction==tvKey.KEY_ENTER){
if($('.menuButton').push()){
$('.simple_menu').slideDown('easy');
........
3 ответа
Призвание .push(x)
на селекторе JQuery действует так же, как вызов .push(x)
на обычном массиве в Javascript.
От W3Schools и Сети разработчиков Mozilla:
Метод push() добавляет новые элементы в конец массива и возвращает новую длину.
а также
Возвращает: Новое свойство длины объекта, для которого был вызван метод.
Если аргументы не переданы .push()
, затем массив остается как есть, а длина все еще возвращается. Так что здесь происходит, длина массива возвращается и используется для оценки if
заявление.
Пример: следующий вернет номер p
теги:
$("p").push();
Но будьте осторожны:.push
Метод для объектов JQuery помечен только для внутреннего использования и поэтому не должен зависеть от него.
На этот метод нельзя полагаться. Не используйте это.
push()
определяется в объекте jQuery (который является массивоподобным объектом), и он сопоставляется с нативным Array.prototype.push()
метод, но он предназначен только для внутреннего использования, не документирован, и вы не можете быть уверены, что он будет работать так же в будущих версиях.
В этом коде, кажется, он используется для получения количества элементов в объекте jQuery (что является тем, что .push()
делает, он возвращает значение length
имущество).
Но есть документированный способ сделать это:
$('.menuButton').length
Код опирается на тот факт, что если length
ноль, он будет оценивать false
в Javascript при преобразовании в логическое значение, поэтому код в if
Блок будет работать, только если объект jQuery не пуст.
Я не уверен что $().push
существует или даже существует (не путать с нативным JavaScript array.push()
метод), но вы, вероятно, ищете $().add
:
Для объекта jQuery, представляющего набор элементов DOM, метод.add() создает новый объект jQuery из объединения этих элементов и элементов, переданных в метод.
Также обратите внимание, что объект jQuery никогда не может быть ложным, ваш оператор if, вероятно, должен быть:
if($('.menuButton').add(something).length > 0) {
Редактировать: похоже, вы используете только внутренний, недокументированный и неподдерживаемый метод jQuery. Если вы хотите получить длину текущего объекта jQuery (что $().push()
кажется, делать), просто используйте length
:
if($('.menuButton').length > 0) {