3

半年后我才发现 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>
4

3 回答 3

2

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

option element(use optionelement.text)
input element(use inputelement.value)
style element(use styleelement.styleSheet.cssText)
script element(use scriptelement.text)
于 2011-05-29T19:37:48.157 回答
1

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

如果您可以发布该方法的作用,那将有助于我们进行调试。否则,您可以尝试document.querySelectorAll('.field_' + name)改用,看看是否可以解决它;这在 IE8 及更高版本中受支持,至少在您处于标准模式时是这样。

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

于 2011-05-29T17:40:36.153 回答
0

好吧,删除末尾的*

 e.appendChild(document.createTextNode(value + ' '));*
于 2011-05-29T19:18:03.030 回答