代码之家  ›  专栏  ›  技术社区  ›  jtpereyda

在DOM元素上使用Javascript的typeof检查未定义(即问题)

  •  1
  • jtpereyda  · 技术社区  · 14 年前

    我想遍历一个DOM元素列表(复选框),并且只要定义了这个列表,就可以继续。元素是“c1r1”、“c1r2”、“c1r3”等。一旦遇到未定义的元素,我就会停止。问题似乎是在DOM元素中使用typeof。

    下面是违规代码:

    function domIsDefined(idString){
        alert(idString);
        var isItDefined = (typeof $(idString) != 'undefined');
        alert(isItDefined);
        return isItDefined;
    }
    ...
    for(i=1; domIsDefined('c1r' + i); i++){
        if($('c1r' + i).checked==true){
            // do stuff
        }
    }
    

    问题的关键在于这一行:

    var isItDefined = (typeof $(idString) != 'undefined');
    

    正如我发现的,问题是typeof$(idString)总是返回object,不管它是否被定义。有什么好办法做这种事吗?我想我会试试看,早点检查一下。检查过的房子,但那感觉很恶心。

    5 回复  |  直到 13 年前
        1
  •  5
  •   Tim Down    14 年前
    function domIsDefined(idString){
        return !!document.getElementById(idString);
    }
    
        2
  •  1
  •   Josiah Ruddell    14 年前

    检查数组的长度。jQuery总是返回一个jQuery实例,其中包含一个匹配元素的数组。

    $(idString).length > 0
    
        3
  •  1
  •   Bobmcbobzorz    14 年前
    if($("#id").length){}
    
        4
  •  1
  •   jball    14 年前

    jQuery总是返回一个对象(数组)。如果找不到具有该ID的元素,则返回数组的长度将为0。

    var isItDefined = ($(idString).length > 0);
    

    更新:对于prototype,应该检查null以查看是否找到该对象

    var isItDefined = ($(idString) !== null);
    
        5
  •  0
  •   wajiw    14 年前

    在jQuery中,$()将始终返回一个对象。请改为:

    var isItDefined = (typeof document.getElementById(idString) != 'undefined');