Javascript if(document.getElementById(';something';)!=null)是否与if(document.getElementById(';something';)相同?

Javascript if(document.getElementById(';something';)!=null)是否与if(document.getElementById(';something';)相同?,javascript,jquery,dom,Javascript,Jquery,Dom,当我想检查页面中是否存在元素时。这两张支票是一样的吗? 有没有更好更紧凑的方法来检查是否存在 如果我想检查值是否='',该怎么办。这也可以包括在此检查中吗?对元素的引用永远不会看起来是“虚假的”,因此取消显式空检查是安全的 Javascript将布尔上下文中对某些值的引用视为false:未定义、null、数字零和NaN,以及空字符串。但是getElementById返回的不是元素引用,就是null。因此,如果元素在DOM中,则返回值将是对象引用,并且在if()测试中,所有对象引用都是true。如

当我想检查页面中是否存在元素时。这两张支票是一样的吗? 有没有更好更紧凑的方法来检查是否存在


如果我想检查
值是否=''
,该怎么办。这也可以包括在此检查中吗?

对元素的引用永远不会看起来是“虚假的”,因此取消显式空检查是安全的

Javascript将布尔上下文中对某些值的引用视为
false
:未定义、null、数字零和
NaN
,以及空字符串。但是
getElementById
返回的不是元素引用,就是null。因此,如果元素在DOM中,则返回值将是对象引用,并且在
if()
测试中,所有对象引用都是
true
。如果元素不在DOM中,则返回值将是
null
,并且
null
If()
测试中总是
false

包含比较是无害的,但就我个人而言,我更喜欢避开那些没有任何作用的代码,因为我觉得每次我的手指碰到键盘时,都可能会引入一个bug:)

请注意,使用jQuery的用户不应该这样做:

因为jQuery函数将始终返回“truthy”值,即使找不到元素,jQuery也会返回一个对象引用。相反:

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

编辑-至于检查元素的值,不,不能在直接使用DOM方法检查元素本身是否存在的同时进行检查。同样,正如其他人在回答中所指出的那样,大多数框架都相对简单和干净

document.getElementById('something')可以是“未定义的”。通常(虽然不总是这样)做测试就足够了,比如
if(document.getElementById('something'))
是的。试试这个。。当第一部分为false/null时,延迟求值应禁止条件的第二部分求值:

var someval = document.getElementById('something')
if (someval && someval.value <> '') {
var-someval=document.getElementById('something')
if(someval&&someval.value“”){
将为您提供此功能以及更多

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);
    });
});
最好(但更冗长)使用:

请注意,我的答案的第一个版本是错误的:

var element = document.getElementById('something');
if (typeof element !== "undefined" && element.value == '') {
}
因为
getElementById()
总是返回一个对象(如果找不到,则返回null对象),并且检查
是否“未定义”
永远不会返回
false
,因为
typeof null!==“未定义”
仍然是
true

只需这样做:

如果(!document.getElementById(“someId”){/Some code.Note(!)在expression/}

如果id为“someId”的元素不存在,则表达式将返回TRUE(非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>

试验
var createPerson=函数(名称){
风险人;
如果(!document.getElementById(名称)){
警报(“元素不存在。让我们创建它。”);
person=document.createElement(“div”);
//添加参数名称作为元素的ID
person.id=姓名;
//将元素追加到文档的正文中
文件.正文.附件(人);
}否则{
警报(“元素存在。让我们通过ID获取它!”);
person=document.getElementById(名称);
}
person.innerHTML=“你好!”;
};
//运行函数。
createPerson(“someid”);
在浏览器中尝试此操作,它会提示“元素不存在。让我们创建它。”

现在加上

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


如果您只想从元素中获取
.value
,最干净的版本特别好

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

我不建议像那样不必要地调用
getElementById
两次。不需要计算
document.getElementById('something'))
两次。他特别要求检查元素的值是否不等于“”,至少我是这样理解他的意图的。是的,在这种情况下,您将从getElementById()调用返回的元素存储为一个值,并使用该值,而不是两次调用getElementById()。请参阅我的答案。这篇文章中还有很多好信息。(但我更喜欢习惯性地检查typeof。)在这种情况下检查“typeof”是完全无用的,因为
getElementById
的返回值将始终是类型“object”,即使它为null。对我来说,jquery的全部要点是您不需要“if”。只有jquery选择器。@batthink同意-很少需要这样检查,但并不奇怪。有很多方法可以检查定义。也有很多方法可以破坏它们。例如,您键入(if(someValue){}):如果someValue==false怎么办?它已定义,但为false,因此条件失败。如果您使用(if(someValue!=undefined){}:我可以通过设置undefined=true来中断代码。typeof总是返回一个类型字符串,如果您正在测试的对象未定义,它将返回“undefined”)。在这种特定情况下,他调用的是
getElementById()
。我们知道它将返回什么。例如,它不能返回常量
false
。它将返回一个元素,或
null
。哇,设置undefined=true…yikes。我当然想知道允许这样做的理由。无论如何,很好的解释,谢谢。@Tim你可以使用
(void 0)
而不是
未定义的
如果你是偏执狂。如果我只是做
如果(元素)
“使用JQuery”本身就值得一次投票?甚至不是“如果你使用JQuery,你可以这样做…”?伙计…如果我只是发布“JQuery可以做到”,也许我会有更多的代表性在每一个JavaScript thread.lol中。好的建议imho:使用jquery处理每一个JavaScript问题,即.jQue
<div id="someid"></div>
document.getElementById('elementsid') ? function_if_exists(); function_if_doesnt_exists();