我想迭代一个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属性,但这感觉很恶心。
答案 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)
$()将始终返回一个对象。试试这个:
var isItDefined = (typeof document.getElementById(idString) != 'undefined');