Подтвердить что ты не робот

Является ли if (document.getElementById('something')!= Null) идентичным if (document.getElementById('something'))?

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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.

Ответ 3

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

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

Если элемент с id "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 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>

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

Ответ 4

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

Ответ 5

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

var someval = document.getElementById('something')
if (someval && someval.value <> '') {

Ответ 6

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);
    });
});

Ответ 7

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

document.getElementById('elementsid') ? function_if_exists(); function_if_doesnt_exists();