IE7为什么不认为这两个字符串相等?

时间:2009-09-04 03:42:21

标签: javascript jquery internet-explorer-7

我有一个事件处理程序将取消选中相应复选框列表中的元素。在复选框的click事件的处理程序中,首先我复制该复选框的标签值:

var label = $(this).next().html();

然后,我遍历列表项并将它们与该标签进行比较:

  $("#sortable li").each(function() {
    if ($(this).html() === label) {
      $(this).remove();
    }
  });

在Internet Explorer 8和Firefox中,这完全符合我的预期。在Internet Explorer 7中,它没有。 “if”语句中的条件永远不会成立。我在这里缺少什么?

根据要求,在一种情况下,被比较的字符串是“充电”和“充电”。

4 个答案:

答案 0 :(得分:4)

  1. 尝试使用alert(label)alert($(this).html())来查看正在比较的内容。
  2. 我没有看到任何理由使用严格比较(===),您可以想象使用普通比较(==)。
  3. 作为一种做你想做的事情的方法,这一切看起来都很疯狂。我总是建议通过比HTML内容更有意义的东西来识别相应的DOM元素,例如ID。

答案 1 :(得分:2)

为什么不使用脚本调试器并查看比较为何错误?只需在if中设置一个断点并观察变量。

IE8内部脚本调试器将帮助您,只需切换到兼容模式即可在IE7 javascript运行时中运行脚本

答案 2 :(得分:1)

你试过调试吗?使用alert查看这两个值的含义,检查该函数是否在IE7中实际调用,并检查它们是否具有相同的类型。

答案 3 :(得分:0)

不是您直接问题的答案,但这是另一种使用jQuery's data method直接在元素上设置和读取标记的方法:

$(this).next().data("toRemove", true);

//...

$("#sortable li").each(function() {
  if ($(this).data("toRemove")) {
    $(this).remove();
  }
});

当然,如果你在任何时候操纵label那么这就不是你想要的了。我只是提到这一点,因为.data()是一个非常有用的jQuery功能,我没有听说过多少。直到一周前我才知道它。