То, если (document.getElementById ('что-то')! =null) идентичный, к если (document.getElementById ('что-то'))?

Когда я хочу проверить, существует ли элемент на странице. Действительно ли эти две проверки являются тем же? Существует ли лучший более компактный способ проверить существование?

Что, если я хочу проверить если value == ''. Это может быть включено в эту проверку также?

28
задан Philipp M 20 September 2013 в 08:23
поделиться

5 ответов

Ссылка на элемент никогда не будет выглядеть «фальшивой», поэтому отказ от явной нулевой проверки безопасен.

Javascript будет обрабатывать ссылки на некоторые значения в логическом контексте как false : undefined, null, числовой ноль и NaN , а также пустые строки. Но то, что возвращает getElementById , будет либо ссылкой на элемент, либо нулевым значением. Таким образом, если элемент находится в DOM, возвращаемое значение будет ссылкой на объект, и все ссылки на объекты будут истинными в тесте if () . Если элемент не в DOM, возвращаемое значение будет null , а null всегда false в if () тест.

Включать сравнение безвредно, но лично я предпочитаю убирать фрагменты кода, которые ничего не делают, потому что я полагаю, что каждый раз, когда мой палец касается клавиатуры, я могу ввести ошибку :)

Обратите внимание, что эти использование jQuery должно не делать это:

if ($('#something')) { /* ... */ }

потому что функция jQuery всегда будет возвращать что-то «правдивое» - даже если элемент не найден, jQuery возвращает ссылку на объект. Вместо этого:

if ($('#something').length) { /* ... */ }

редактировать - что касается проверки значения элемента, нет, вы не можете делать это одновременно с проверкой существования самого элемента напрямую. с методами DOM. Опять же, большинство фреймворков делают это относительно простым и понятным, как отмечали другие в своих ответах.

29
ответ дан 28 November 2019 в 03:08
поделиться

Лучше (но более многословно) использовать:

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 .

17
ответ дан 28 November 2019 в 03:08
поделиться

document.getElementById ('something') может быть 'undefined'. Обычно (считалось не всегда) достаточно выполнить тесты вроде if (document.getElementById ('something')) .

2
ответ дан 28 November 2019 в 03:08
поделиться

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);
    });
});
0
ответ дан 28 November 2019 в 03:08
поделиться

Да. Попробуйте это... ленивая оценка должна запретить вторую часть условия, если первая часть false/null:

var someval = document.getElementById('something')
if (someval && someval.value <> '') {
0
ответ дан 28 November 2019 в 03:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: