1

angularjs と ng-table ディレクティブ ( http://bazalt-cms.com/ng-table/ ) を使用して Web アプリケーションを構築します。ng-table ディレクティブで実装されたテーブル コントロールは Chrome と Firefox で正常に動作しますが、テーブル ヘッダーは Internet Explorer 9 では表示されません。この動作は、たとえば ng-table doc の例 1 ( http://bazalt -cms.com/ng-table/example/1 )。

例をデバッグすると、テーブルのヘッダー部分に使用されるテンプレートが IE9 に正しく読み込まれていないことがわかりました。次のようになります (chrome からの出力):

(大きな画像) http://abload.de/img/ngtablechromehwfts.png

ngTable クローム

しかし、IE9 での結果は次のようになります: (大きな画像) http://abload.de/image.php?img=ngtableietepeu.png ng テーブル IE

- タグは ng-include を使用して、<thead>テンプレートから子ノードをロードします。しかし、IEはテンプレートから<tr>andタグを切り取ってしまうため、問題が発生します。要素の子である back が表示され<th>ます<div><th>これは、IE が何らかの形でテンプレート コードを「チェック」し、対応する要素のない<tr>and要素を見つけてタグを削除するために発生していると思います。<th><table>

この要素の削除を回避する方法を知っている人はいますか? IE 互換モードに何らかの関係がありますか? IE 互換モードとドキュメント モードをいじってみたところ、要素が削除されないことが時々ありました。しかし、これを再現できませんでした。

<thead>要素に含まれるテンプレートは次のとおりです。

<tr>
    <th ng-repeat="column in $columns"
        ng-class="{
                    'sortable': parse(column.sortable),
                    'sort-asc': params.sorting()[parse(column.sortable)]=='asc',
                    'sort-desc': params.sorting()[parse(column.sortable)]=='desc'
                  }"
        ng-click="sortBy(column)"
        ng-show="column.show(this)"
        ng-init="template = column.headerTemplateURL(this)"
        class="header {{column.class}}">

        <div ng-if="!template" ng-show="!template" ng-bind="parse(column.title)"></div>
        <div ng-if="template" ng-show="template"><div ng-include="template"></div></div>
    </th>
</tr>

しかし、より単純なテンプレートでも同じ効果があります。IE9 で削除され<tr>、DOM に含まれます。<th><div>

<tr>
    <th>
        <div>test text</div>
    </th>
</tr>
4

1 に答える 1

3

ここでもこの問題があります。さらに深くグーグルすると、これが見つかりました:

http://goo.gl/jPmcva

につながる

innerHTML プロパティは、col、colGroup、frameSet、html、head、style、table、tBody、tFoot、tHead、title、および tr オブジェクトでは読み取り専用です。

http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspxで読むように。

編集:

私たちが発見したように、angular が JQLite を使用して html 要素を処理するとエラーが発生しますが、jquery を使用すると問題はなくなります。重要なことは、angular.js の前に jquery.js を含めることです。そうしないと、angular は jqlite を使用し続けます。これを見たいと思うかもしれません: Angularjs jqlite append() と jquery append() は <td> で異なる動作をします

于 2014-02-20T10:13:00.083 に答える