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 デバッガーは、* でマークされた行について不平を言います。エラー: メソッドまたはプロパティ アクセスへの予期しない呼び出しです。

誰かが自分の貴重な時間を割いて助けてくれませんか? 私が4歳のときのように答えを書いてください.

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%確信するのは難しいです。getElementsByClassテストする1つの方法は、の本体をで置き換えて、return document.querySelectorAll('.field_' + name)それが修正されるかどうかを確認することです...このように、getElementsByClass関数はまだ存在しているため、他のすべてのコードは壊れていませんが、より正しい可能性があります。

于 2011-05-29T17:40:36.153 に答える
0

まあ、末尾の * を削除します

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