如果我想要检查
value == ''
,这也可以包含在这个检查中吗?value == ''
,这也可以包含在这个检查中吗?一个元素的引用永远不会看起来"假",因此省略显式的 null 检查是安全的。
Javascript 会将一些值在布尔上下文中视为 false
:undefined、null、数值零和 NaN
以及空字符串。但是 getElementById
返回的要么是一个元素引用,要么是 null。因此,如果元素在 DOM 中,则返回值将是一个对象引用,所有对象引用在 if ()
测试中都是真(true
)。如果元素不在 DOM 中,则返回值将是 null
,而 null
在 if ()
测试中始终为假(false
)。
包含比较是无害的,但个人认为最好不要包含不需要的代码,因为每次按键都可能引入错误 :)
请注意,那些使用 jQuery 的人不应该这样做:
if ($('#something')) { /* ... */ }
因为jQuery函数总会返回一个"真值",即使没有找到元素,jQuery也会返回一个对象引用。应该这样写:
if ($('#something').length) { /* ... */ }
编辑 — 关于检查元素的值,不能同时使用DOM方法直接检查元素本身的存在性。与此类似,大多数框架都可以使其相对简单和清晰,正如其他回答中所指出的那样。
更好的做法(尽管冗长)是使用:
var element = document.getElementById('something');
if (element != null && element.value == '') {
}
请注意,我答案的第一个版本是错误的:var element = document.getElementById('something');
if (typeof element !== "undefined" && element.value == '') {
}
因为getElementById()
总是返回一个对象(如果未找到则返回null对象),而检查"undefined"
永远不会返回false
,因为typeof null !== "undefined"
仍然是true
。
getElementById()
。 我们知道它会返回什么。 例如,它不能返回常量false
。 它将返回一个元素或null
。 - Pointy(void 0)
代替undefined
。 - Pointyif (element)
会发生什么? - windmaomao像这样做:
如果元素的id为"someId"不存在,则表达式将返回TRUE(NOT FALSE === TRUE)或!false === true。代码如下:
if(!document.getElementById("someId")) {
//一些代码。注意在表达式中的NOT(!)
}
试试这段代码:
<!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>
document.getElementById('something')可能是'undefined'。通常(虽然不总是)进行测试,例如if (document.getElementById('something'))
就足够了。
是的。试试这个...惰性求值应该在第一部分为假/空时防止第二部分求值:
var someval = document.getElementById('something')
if (someval && someval.value <> '') {
getElementById
。 - Pointydocument.getElementById('something')
。 - Gumbo最干净的版本,特别适合仅想从元素中获取.value
的情况。
document.getElementById('elementsid') ? function_if_exists(); function_if_doesnt_exists();
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);
});
});
getElementById
返回的值始终是类型为 "object",即使它为 null。 - Pointy