2010-07-14 2 views
21

Когда я хочу проверить, существует ли элемент на странице. Эти две проверки одинаковы? Есть ли лучший более компактный способ проверить существование?Является ли if (document.getElementById ('something')! = Null) идентичным if (document.getElementById ('something'))?

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

ответ

24

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

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

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

Примечания что те, с помощью JQuery должен не это сделать:

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

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

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

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

+0

Существует также много хорошей информации в этой должности. (Но я предпочитаю, чтобы всегда проверять TYPEOF по привычке.) – Andir

+2

Проверка «TYPEOF» в данном случае полностью бесполезно, потому что возвращаемое значение из 'getElementById' всегда будет типом« объекта », даже если оно равно null. – Pointy

+4

Для меня весь смысл jquery в том, что вам не понадобится «if». Просто селектор jquery. – NimChimpsky

2

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

+0

вы забыли закрыть кронштейн –

+0

@Andreas Niedermair: Спасибо. Отредактировано, чтобы добавить это. – Robusto

0

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

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

Я бы не рекомендовал лишний раз называть 'getElementById' дважды. – Pointy

+0

Нет необходимости оценивать 'document.getElementById ('something')' дважды. – Gumbo

+0

Он специально попросил проверить, что значение элемента не равно '', по крайней мере, так я читал его намерение. – Fosco

0

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

«Использовать JQuery» стоит того, чтобы все остальное было само по себе? Даже «Если вы используете JQuery, вы можете сделать это так ...»? Человек ... Может быть, у меня было бы больше репутации, если бы я только что опубликовал «JQuery может сделать это» в каждом потоке JavaScript. –

+0

lol. Хороший совет imho: используйте jquery для каждой проблемы с javascript. – NimChimpsky

+0

jQuery - «хороший совет», но это не то, о чем просили. Мне нравится, что предоставляет jQuery и широко использует его. Это отличная каркас, чтобы получить поддержку. – Andir

12

Это лучше (но 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.

+1

Почему это лучше? –

+1

Есть много способов проверить определение. И много способов их разбить. Скажем, например, вы вводите (if (someValue) {}): Что делать, если someValue == false? Он определен, но он неверен, поэтому условие терпит неудачу. Если вы используете (если (someValue!= undefined) {}): Я могу сломать ваш код, установив undefined = true. typeof всегда возвращает строку типа, и если объект, который вы тестируете, не определен, он возвращает «undefined»). – Andir

+1

В этом * конкретном * случае он вызывает 'getElementById()'. Мы знаем, что это будет. Например, он не может возвращать константу 'false'. Он вернет элемент или «null». – Pointy

4

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

если (document.getElementById ("someId") {/ Часть кода Обратите внимание на NOT() в expresion /.!};

Если элемент! с идентификатором "someId" не существует expresion возвратит TRUE (нЕ ЛОЖЬ === 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> 

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

0

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

document.getElementById('elementsid') ? function_if_exists(); function_if_doesnt_exists(); 
Смежные вопросы