【问题标题】:Using Javascript's typeof on DOM elements to check undefined (IE problem)在 DOM 元素上使用 Javascript 的 typeof 来检查 undefined(IE 问题)
【发布时间】:2010-11-16 17:51:46
【问题描述】:

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

这是有问题的代码:

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 属性,但这感觉很恶心。

【问题讨论】:

  • 是否有任何特定原因无法使用单个 DOM 方法获取所有复选框,即 getElementsByTagName('input') 并遍历节点集合?或者,如果您使用 jQuery,只需 $(':checked').each( function(){ /*do stuff*/ });
  • 这是使用原型,很抱歉造成混淆。我应该澄清一下。
  • 对标题中的 IE 也感到抱歉...我以为只有 IE,但我的 Firebug 控制台刚刚关闭。

标签: javascript dom prototypejs undefined typeof


【解决方案1】:
function domIsDefined(idString){
    return !!document.getElementById(idString);
}

【讨论】:

  • 天才!这里的问题是 typeof 在给定“任何其他对象”或 null 的情况下返回“对象”时会丢失信息。但 null 和 HTML 对象的布尔值是不同的。所以第一个!转换为布尔值,这是我真正需要的。谢谢!这太美了!
  • 另外,我喜欢以非正统方式使用多个运算符的疯狂解决方案。
  • 我可能不应该写这么多 cmets,但@jball 表明这也适用于原型的 $。
  • 我不想危及我的天才地位,但是! thing 是在 JavaScript 中将值转换为布尔值的一种很常见的方法。
【解决方案2】:

检查数组的长度。 jQuery 总是返回一个带有匹配元素数组的 jquery 实例。

$(idString).length > 0

【讨论】:

    【解决方案3】:
    if($("#id").length){}
    

    【讨论】:

    • 我不知道这在 jQuery 中是否意味着什么,但它会使原型崩溃。
    【解决方案4】:

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

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

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

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

    【讨论】:

    • 我的意思是,我可以自己检查一下。原型并不总是返回一个数组(我很确定),所以我尝试将它转换成一个数组。但这没有产生任何结果。 var tempA = new Array(); tempA[0] = idString; var isItDefined = ($(tempA).length > 0);
    • 哦,好吧,效果很好。对于这种情况,我想要一个!,但这正是我所需要的。
    • @Josh - 抱歉,我对那里的操作员有点马虎 - 我已经更新它实际上返回 truenull 值:)
    【解决方案5】:

    $(),在 jQuery 中,总是会返回一个对象。试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2012-06-29
      • 1970-01-01
      • 2011-11-01
      • 2011-03-05
      • 2012-03-10
      • 2011-03-17
      相关资源
      最近更新 更多