Когда я хочу проверить, существует ли элемент на странице. Эти две проверки одинаковы? Есть ли более компактный способ проверить существование?
Что делать, если я хочу проверить, есть ли value == ''
. Можно ли также включить эту проверку?
Когда я хочу проверить, существует ли элемент на странице. Эти две проверки одинаковы? Есть ли более компактный способ проверить существование?
Что делать, если я хочу проверить, есть ли value == ''
. Можно ли также включить эту проверку?
Ссылка на элемент никогда не будет выглядеть "ложной", поэтому отказ от явной проверки на нуль безопасен.
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. Опять же, большинство структур делают это относительно простым и чистым, как другие отметили в своих ответах.
Лучше (но 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
.
Просто сделайте это так:
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>
в теле страницы и повторите попытку. Вуаля!:)
document.getElementById( "что-то" ) может быть "undefined". Обычно (думают не всегда) достаточно выполнить такие тесты, как if (document.getElementById('something'))
.
Да. Попробуйте это. Ленивая оценка должна запретить вторую часть условия оценивать, когда первая часть ложна /null:
var someval = document.getElementById('something')
if (someval && someval.value <> '') {
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);
});
});
Чистая версия особенно хороша, если вы просто хотите получить .value
от элемента.
document.getElementById('elementsid') ? function_if_exists(); function_if_doesnt_exists();