【问题标题】:javascript if statement in for loop not finding ==for循环中的javascript if语句未找到==
【发布时间】:2012-09-12 22:13:49
【问题描述】:

我有一个 for 循环,我对控制台的跟踪显示我的变量是正确的。 Epid 是用另一种方法确定的。

 for (var i=0; i< $('#slideshow > div').length; i++) {
   var divid = $('#slideshow > div').eq(i);
   console.log(divid)
   console.log(epid)
   if ( divid == epid ) {
    alert("equal " + epid);
   } else {
    console.log("blah");
   };
};

在循环中的某一时刻,控制台显示元素相同,但没有弹出警报。 控制台:

<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep5">​…​</div>​
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​
blah
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​
blah
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep7">​…​</div>​
<div style=​"height:​ 100%;​ display:​ none;​ " id=​"ep6">​…​</div>​
blah

【问题讨论】:

  • 你真的不应该写这样的循环。至少,将$('#slideshow &gt; div') 的值保存在一个变量中。根据您的代码编写方式,DOM 查找将在循环的每次迭代中进行 两次
  • 您想在for 循环中寻找什么?您在寻找特定的 DOM 对象吗?您是否希望匹配 DOM 对象的内容?究竟是什么?

标签: javascript jquery if-statement for-loop


【解决方案1】:

divid 是一个 jQuery 对象。它永远不会匹配另一个变量,除非该变量指向完全相同的 jQuery 对象。 ===== 比较对象引用以查看它们是否完全相同。它不比较那些对象的内容。

如果 epid 是一个 DOM 对象并且您的代码的目的是比较 DOM 对象,那么对于 epiddivid,您应该使用 .get(i)[i] 而不是 .eq(i)

var divid = $('#slideshow > div').get(i);

假设 epid 是一个 DOM 对象,并且您正在寻找幻灯片中的哪个项目与该对象匹配,您可以使用更高效和正确的代码,如下所示:

var items = $('#slideshow > div');
for (var i = 0; i < items.length; i++) {
    var divid = items[i];
    if ( divid === epid ) {
        alert("equal " + epid);
    } else {
        console.log("blah");
    }
}

如果您只想知道幻灯片集合中的索引epid,则不需要for 循环来手动查找它 - 您可以这样做:

var index = $('#slideshow > div').index(epid);

【讨论】:

  • 谢谢...我也必须做 Epid.get(0);所以我处理的是元素而不是你指出的 $objects 。这对我来说是一个巨大的教训,非常感谢。
【解决方案2】:

我假设从您的代码中您想比较元素的 Html?

 for (var i=0; i< $('#slideshow > div').length; i++) {
   var divid = $('#slideshow > div').eq(i);
   console.log(divid)
   console.log(epid)
   if ( divid.html() == epid.html()) {
    alert("equal " + epid);
   } else {
    console.log("blah");
   };
};

【讨论】:

    【解决方案3】:

    您在这里比较两个对象..只有完全相同的对象才是正确的..所以而不是 == 使用 === 。还假设如果每个 div 都有一个 id 你可以比较它的 id 属性..

    for (var i=0; i< $('#slideshow > div').length; i++) {
       var divid = $('#slideshow > div').eq(i);
       var dID = divid.attr('id');
       var eID = epid.attr('id');
       console.log(divid);
       console.log(epid);
       if(dID != ''  && eID != ''){
           if ( dID == eID ) {
              alert("equal " + epid);
           } else {
             console.log("blah");
           };
        }
    };
    

    这只有在 div 已经有一个 ID 时才有效。或者每个 div 都有一个特定的类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-16
      • 2019-06-09
      • 1970-01-01
      相关资源
      最近更新 更多