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) {
Другие вопросы по тегам