代码之家  ›  专栏  ›  技术社区  ›  Malik Daud Ahmad Khokhar

是if(document.getElementById('something')=null)与if(document.getElementById('something')相同?

  •  24
  • Malik Daud Ahmad Khokhar  · 技术社区  · 16 年前

    有没有更好的更紧凑的方法来检查存在?

    如果我想检查一下 value == '' . 这张支票也可以包括在内吗?

    7 回复  |  直到 12 年前
        1
  •  31
  •   Pointy    10 年前

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

    false :未定义、null、数字零和 NaN getElementById 返回值要么是元素引用,要么为null。因此,如果元素在DOM中,则返回值将是一个对象引用,并且所有对象引用都是 true 在一个 if () 测试。如果元素是 在DOM中,返回值为 null 无效的 在一个 如果()

    注意,那些使用jQuery的人应该 请执行以下操作:

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

    因为jQuery函数总是返回“truthy”的东西——即使没有找到元素,jQuery也会返回一个对象引用。取而代之的是:

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

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

        2
  •  20
  •   worldofjr lola_the_coding_girl    10 年前

    最好(但更冗长)使用:

    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
  •  6
  •   Gawran    12 年前

    就这样做吧:

    一些密码。注意不要(!)在表达式中 / };

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

    在浏览器中尝试此操作,它会提示“元素不存在”。我们来创建它。”

    现在添加

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

        4
  •  2
  •   Robusto    16 年前

    document.getElementById('something')可以是“未定义的”。通常(认为不总是)做这样的测试就足够了 if (document.getElementById('something')) .

        5
  •  1
  •   Fosco    16 年前

    是 啊。试试这个。。当第一部分为false/null时,延迟求值应禁止条件的第二部分求值:

    var someval = document.getElementById('something')
    if (someval && someval.value <> '') {
    
        6
  •  0
  •   NimChimpsky    16 年前

    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
  •  0
  •   Pedro Pereira    10 年前

    最干净的版本特别好,如果你只是想得到 .value 从元素。

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