2015-02-20 2 views
0

я делаю следующее:Возможная логическая ошибка или компаратор вопрос

if ($('#selectYears option[value="' + $(this).val() + '"]') != null || $('#selectYears option[value="' + $(this).val() + '"]') != []) { 
     console.log("inside if") 
     $('#selectYears option[value="' + $(this).val() + '"]').remove().appendTo($('#selectYears')) 
    } else { 
     console.log("inside else") 
     $('#selectedYears option[value="' + $(this).val() + '"]').remove().appendTo($('#selectYears')) 
    } 
}) 

Если я сделать $('#selectYears option[value="my value"]') в консоли Хрома я получаю []. Но я печатаю внутри, если (поэтому моя проверка не работает). В этом случае мне нужно попасть в другое. Где я ошибаюсь?

+1

селектор JQuery не может быть пустым или пустой массив, как он всегда возвращает Объект jQuery. Если вы пытаетесь проверить, существует ли этот элемент, используйте 'length', иначе объясните немного больше о том, что вы пытаетесь сделать. –

ответ

4

Селектор jQuery никогда не возвращает null или массив, он возвращает объект jQuery. Он выглядит как массив в консоли, потому что он обладает свойствами, которые делают его «похожим на массив», но на самом деле он не является массивом и не будет сравниваться с []. Более подробно об этом см

What makes a jQuery object show up as an array in Chrome's Developer Tools?

Если вы хотите знать, если что-то было подобрано, используйте .length:

if ($('#selectYears option[value="' + $(this).val() + '"]').length != 0) { 
+0

Благодарим вас за разъяснение и ссылку! –

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