2015-05-13 3 views
-2

СЛУЧАЯJQuery возвращает []

JQuery Retuns [], когда нет никаких элементов совпавших по данным селекторов.


РЕЗУЛЬТАТ РЕЗЮМЕ

var a = $("");  // -> returns [] 
var b = $();  // -> returns [] 
var c = $(null); // -> returns [] 
var d = $("#abcd"); // -> returns [] there's no elements that have 'abcd' id attribute. 

// FYI : Below results go same with 'b', 'c', 'd' as well. 
typeof a   // -> "object" 
a instanceof jQuery // -> true 
$.isEmptyObject(a) // -> false 
if (a == null) // -> false 
if (a == undefined)// -> false 

// workaround to get to know 'a' is an empty, invalid jQuery object. 
a.size()   // -> 0 ... as Pebb said, this has been deprecated from version 1.8 
a.length() 
a[0]    // -> undefined 

Как я могу сделать предостережет?

Как вы можете видеть выше РЕЗУЛЬТАТ РЕЗЮМЕ, Там нет никакого способа, что гарантирует это безопасный объект JQuery кроме обходного я указал выше. Но .size() предназначен для измерения количества объектов, содержащихся в объекте jquery, и object[index] - для получения ojbect или значения от Array или простого объекта от jQuery object.

Ну, никто не будет обвинять меня в использовании обходного пути, но я чувствую, что что-то не хватает.


UPDATE SCENERIO

Я не хотела вам сказать, что returing [] не является безопасным и что-то не так с ним. Я забыл предложить вам такого рода scenerio, это было мое плохое в конце концов.

Предположим, что есть пользовательский ввод и пользователи типа id значений для чего-то случившегося в своем браузере. Это может быть сделано, когда мы уже знаем, которые id значения пользователи будут вводить. Код будет выглядеть, как показано ниже

// id variable is what user typed in a textbox 
var target = $(id); 

// Let's say we need the target's height, As Alfonso Garnett said this will return null 
// Because there is no DOM elements to get its height value. 
target.height(); 

Таким образом, мы, возможно, потребуется, чтобы подтвердить target безопасно использовать height() апи или нет. Вот почему возвращение [] не кажется безопасным при таких обстоятельствах. Это то, о чем я прошу.


ВТОРАЯ UPDATE

Хорошо, .height(), даже из пустого объекта Jquery, возвратит нуль и никакой ошибки. Но после получения значения высоты мы можем предположить, что будет процесс вычисления.

var result = 12345 + target.height(); 

Если target.height() возвращает null, то результат будет 12345, когда результат должен быть 12345 + n. Если нет ошибки, можем ли мы легко узнать, где проблема в процессах расчета? хорошо, учитывая, что остальная часть кодов будет работать нормально без каких-либо перерывов, что является чистым преимуществом. Но мы узнаем только, что не так с расчетами, когда мы выяснили, target.height() дает нам null.

Никто, я думаю, не хочу, чтобы это произошло.Я просто хочу проверить, безопасен ли объект jquery для использования jQuery APIs, и хочу убедиться, что он вернет некоторые полезные значения для моей программы.

+0

Зачем вам нужна ваша память? Документы находятся здесь: http://api.jquery.com/jQuery/ –

+2

Что нужно для защиты? Тот факт, что он возвращает пустое множество, является защитой. –

+4

Он не возвращает массив, он возвращает пустую коллекцию jQuery. Возвращение «null» было бы ужасным противостоянием. – elclanrs

ответ

1

jQuery селекторы всегда возвращает объект jQuery; если он пуст, он пуст. Я думаю, что проблема заключается в том, что если вы набираете эти команды на консоли, возвращаемые (jQuery) объекты jQuery возвращаются в виде массива, что приводит к тому, что консоль отображает его как массив ([]). Это не так: это все еще объект jQuery. Например, попробуйте выполнить следующие действия на консоли:

$('.abcd') instanceof jQuery // true 
$('.abcd') instanceof $   // true 

Здесь нет ничего, что могло бы «защитить» или защитить; jQuery ведет себя совершенно последовательно.

Поскольку объект jQuery всегда возвращается, вы можете успешно использовать любой метод jQuery (например, .height()); никакое исключение не будет выбрано. Так получилось, что .height() в этом случае вполне разумно вернет null, потому что ничего не было достигнуто, чтобы взять высоту. Но никаких исключений не будет.

+1

".toString(), которые просто возвращают строку []". Нет, объект jQuery - объект, подобный массиву. Консоль показывает живое представление объекта. – undefined

+0

Хорошая точка, Вохуман, и ты прав. Я не знаю 100% о том, как консоль делает вещь. Я уточню свой ответ. –

+0

Нет, я уже знал, что это объект jquery. Я обновил свой ответ. Думаю, я заставил всех вас, ребята, смутить здесь. – hina10531

Смежные вопросы