为什么这个 JavaScript 适用于 FF 而不是 IE8

发布于 2024-11-10 12:02:12 字数 1628 浏览 3 评论 0原文

半年后我刚刚发现 IE 无法处理这个脚本,现在我的程序员走了,我自己也受不了了:-(

它在 FF 中工作正常,

这是代码:

function updateFields(name, value) {
  var elements = getElementsByClass('field_' + name);
  for(var i=0; i<elements.length; i++) {
    var e = elements[i];
    while(e.firstChild != null) { e.removeChild(e.firstChild); }
    e.appendChild(document.createTextNode(value + ' '));*
  } // for i
} // updateFields()

我的 IE 调试器抱怨该行标有*。 它显示:错误:意外调用方法或属性访问。

有人可以花一些宝贵的时间来提供帮助吗? 请像我四岁的孩子一样写答案。

function getElementsByClass(cls) {
  var fields = document.getElementsByTagName('*');
  var r = new Array();

  for(var i=0; i<fields.length; i++) {
    var f = fields[i];

    var a = f.getAttribute('class');
    if(a == null)
      a = f.className;

    if(a == null)
      continue;

    var classes = a.split(' ');
    for(var j=0; j<classes.length; j++) {
      if(classes[j] == cls) {
        r.push(f);
        break;
      } // if
    } // for j
  } // for i

  return r;
}

按钮:

<form>
  <p class="center">
    <input type="button" onclick="javascript:book_wire_transfer();" style="border: none;      border:0;"\>


  <p class="center">
    <img src="http://www.-.com/images/text/arrow_left_small.png" alt="&raquo;" class="middle" />
    <span class="submit">
      <input class="submit" type="submit" value="Book now"  />
    </span>
    <img src="http://www.-.com/images/text/arrow_right_small.png" alt="&laquo;" class="middle" />
    </p>

  </p>
  </form>

I have just found out after half a year that an IE cannot process this script and now that my programmer is gone I'm stuck with it myself :-(

It works fine in FF

This is the code:

function updateFields(name, value) {
  var elements = getElementsByClass('field_' + name);
  for(var i=0; i<elements.length; i++) {
    var e = elements[i];
    while(e.firstChild != null) { e.removeChild(e.firstChild); }
    e.appendChild(document.createTextNode(value + ' '));*
  } // for i
} // updateFields()

My IE debugger complains about the line marked with *.
It says: Error: Unexpected call to method or property access.

Can anybody spend some of his/her precious time to help?
Please write answers as if I'm a four-year-old.

function getElementsByClass(cls) {
  var fields = document.getElementsByTagName('*');
  var r = new Array();

  for(var i=0; i<fields.length; i++) {
    var f = fields[i];

    var a = f.getAttribute('class');
    if(a == null)
      a = f.className;

    if(a == null)
      continue;

    var classes = a.split(' ');
    for(var j=0; j<classes.length; j++) {
      if(classes[j] == cls) {
        r.push(f);
        break;
      } // if
    } // for j
  } // for i

  return r;
}

Button:

<form>
  <p class="center">
    <input type="button" onclick="javascript:book_wire_transfer();" style="border: none;      border:0;"\>


  <p class="center">
    <img src="http://www.-.com/images/text/arrow_left_small.png" alt="»" class="middle" />
    <span class="submit">
      <input class="submit" type="submit" value="Book now"  />
    </span>
    <img src="http://www.-.com/images/text/arrow_right_small.png" alt="«" class="middle" />
    </p>

  </p>
  </form>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

空宴 2024-11-17 12:02:12

尽管 IE9 和其他浏览器可以,但 IE8 及更低版本无法向某些元素添加 textNode。

option element(use optionelement.text)
input element(use inputelement.value)
style element(use styleelement.styleSheet.cssText)
script element(use scriptelement.text)

There are elements that IE8 and below cannot add textNodes to, though IE9 and other browsers do.

option element(use optionelement.text)
input element(use inputelement.value)
style element(use styleelement.styleSheet.cssText)
script element(use scriptelement.text)
一腔孤↑勇 2024-11-17 12:02:12

getElementsByClass 不是内置函数,因此它可能来自您正在使用的其他与 IE8 不兼容的库。在这种情况下,它返回的内容可能不是有效的 DOM 节点集。

如果您可以发布该方法的作用,这将有助于我们进行调试。否则,您可以尝试使用 document.querySelectorAll('.field_' + name) 来代替,看看是否可以解决问题; IE8 及以上版本支持此功能,至少在标准模式下是这样。

编辑:您的自定义 getElementsByClass 函数看起来不错,尽管没有单元测试,我很难 100% 确定。一种测试方法是尝试用 return document.querySelectorAll('.field_' + name) 替换 getElementsByClass 的主体,看看是否可以解决问题...这样,getElementsByClass 函数仍然存在,因此您的所有其他代码都没有损坏,但它可能更正确。

getElementsByClass is not a built-in function, so it probably comes from some other library you are using that is incompatible with IE8. In this case, it is probably returning something that is not a valid set of DOM nodes.

If you could post what that method does, that would help us in debugging. Otherwise, you could try using document.querySelectorAll('.field_' + name) instead and see if that fixes it; this is supported in IE8 onwards, at least if you are in standards mode.

EDIT: your custom getElementsByClass function looks OK, although without unit tests it's hard for me to be 100% sure. One way to test would be to try and replace the body of getElementsByClass with return document.querySelectorAll('.field_' + name) and see if that fixes it... In this way, the getElementsByClass function still exists, so all your other code is not broken, but it may be more correct.

被你宠の有点坏 2024-11-17 12:02:12

好吧,删除末尾的*

 e.appendChild(document.createTextNode(value + ' '));*

well, remove the * at the end of

 e.appendChild(document.createTextNode(value + ' '));*
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文