Когда я хочу проверить, существует ли элемент на странице. Действительно ли эти две проверки являются тем же? Существует ли лучший более компактный способ проверить существование?
Что, если я хочу проверить если value == ''
. Это может быть включено в эту проверку также?
Ссылка на элемент никогда не будет выглядеть «фальшивой», поэтому отказ от явной нулевой проверки безопасен.
Javascript будет обрабатывать ссылки на некоторые значения в логическом контексте как false
: undefined, null, числовой ноль и NaN
, а также пустые строки. Но то, что возвращает getElementById
, будет либо ссылкой на элемент, либо нулевым значением. Таким образом, если элемент находится в DOM, возвращаемое значение будет ссылкой на объект, и все ссылки на объекты будут истинными
в тесте if ()
. Если элемент не в DOM, возвращаемое значение будет null
, а null
всегда false
в if ()
тест.
Включать сравнение безвредно, но лично я предпочитаю убирать фрагменты кода, которые ничего не делают, потому что я полагаю, что каждый раз, когда мой палец касается клавиатуры, я могу ввести ошибку :)
Обратите внимание, что эти использование jQuery должно не делать это:
if ($('#something')) { /* ... */ }
потому что функция jQuery всегда будет возвращать что-то «правдивое» - даже если элемент не найден, jQuery возвращает ссылку на объект. Вместо этого:
if ($('#something').length) { /* ... */ }
редактировать - что касается проверки значения элемента, нет, вы не можете делать это одновременно с проверкой существования самого элемента напрямую. с методами DOM. Опять же, большинство фреймворков делают это относительно простым и понятным, как отмечали другие в своих ответах.
Лучше (но более многословно) использовать:
var element = document.getElementById('something');
if (element != null && element.value == '') {
}
Обратите внимание, первая версия моего ответа была неправильной:
var element = document.getElementById('something');
if (typeof element !== "undefined" && element.value == '') {
}
потому что getElementById ()
всегда возвращает объект (нулевой объект, если не найден) ) и проверка на "undefined"
никогда не вернет false
, поскольку typeof null! == "undefined"
по-прежнему true
.
document.getElementById ('something') может быть 'undefined'. Обычно (считалось не всегда) достаточно выполнить тесты вроде if (document.getElementById ('something'))
.
jquery предоставит вам это и многое другое...
if($("#something").val()){ //do stuff}
Мне потребовалось несколько дней, чтобы разобраться с этим, но он предоставляет вам гораздо больше функциональности. Пример ниже.
jQuery(document).ready(function() {
/* finds closest element with class divright/left and
makes all checkboxs inside that div class the same as selectAll...
*/
$("#selectAll").click(function() {
$(this).closest('.divright').find(':checkbox').attr('checked', this.checked);
});
});
Да. Попробуйте это... ленивая оценка должна запретить вторую часть условия, если первая часть false/null:
var someval = document.getElementById('something')
if (someval && someval.value <> '') {