在DOM元素上使用Javascript的typeof来检查undefined(IE问题)

时间:2010-11-16 17:51:46

标签: javascript dom prototypejs undefined typeof

我想迭代一个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)总是返回对象,无论它是否被定义。有没有什么好方法可以做这种事情?我想我会尽早尝试捕获并检查.checked属性,但这感觉很恶心。

5 个答案:

答案 0 :(得分:5)

function domIsDefined(idString){
    return !!document.getElementById(idString);
}

答案 1 :(得分:1)

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

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

更新:对于原型,你应检查null以查看是否找到了对象

var isItDefined = ($(idString) !== null);

答案 2 :(得分:1)

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

$(idString).length > 0

答案 3 :(得分:1)

if($("#id").length){}

答案 4 :(得分:0)

在jQuery中,

$()将始终返回一个对象。试试这个:

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