Является ли if (document.getElementById ('нечто')! = Null) идентичным if (document.getElementById ('что-то'))? - PullRequest
24 голосов
/ 14 июля 2010

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

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

Ответы [ 7 ]

28 голосов
/ 14 июля 2010

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

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

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

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

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

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

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

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

15 голосов
/ 14 июля 2010

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

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.

6 голосов
/ 20 сентября 2013

Просто сделайте это так:

if (! Document.getElementById ("someId") {/ Некоторый код. Обратите внимание на НЕ (!) В выражении /};

Если элемент с идентификатором "someId" не существует, expresion вернет TRUE (NOT FALSE === TRUE) или! False === true;

попробуйте этот код:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="format-detection" content="telephone-no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi">
        <title>Test</title>
    </head>
    <body>
      <script>
var createPerson = function (name) {
    var person;
    if (!document.getElementById(name)) {
        alert("Element does not exist. Let's create it.");
      person = document.createElement("div");
//add argument name as the ID of the element
      person.id = name;
//append element to the body of the document
      document.body.appendChild(person);
    } else {
        alert("Element exists. Lets get it by ID!");
      person = document.getElementById(name);
    }
    person.innerHTML = "HI THERE!";

};
//run the function.
createPerson("someid");
          </script>
       </body>
</html>

Попробуйте это в вашем браузере, и должно появиться предупреждение "Элемент не существует. Давайте создадим его".

Теперь добавьте

<div id="someid"></div>

в тело страницы и повторите попытку.. Вуаля!:)

2 голосов
/ 14 июля 2010

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

0 голосов
/ 30 июня 2016

Чистая версия особенно хороша, если вы хотите получить .value от элемента.

0 голосов
/ 14 июля 2010

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 голосов
/ 14 июля 2010

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

var someval = document.getElementById('something')
if (someval && someval.value <> '') {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...