4

いくつかの要素を a に追加しようとしていますが、組み込みの jqlite を使用する場合と jquery を使用する場合では、動作が異なります。違いを示すためにフィドルを作成しました:http://jsfiddle.net/waylon999/5fyBt/1/

私がするときのように見えます:

element.append('<td>Val 1</td><td>Val 2</td>'); // jqlite

文字列が挿入される前にタグが削除されます。でもやってみると

$(element).append('<td>Val 1</td><td>Val 2</td>'); 

期待どおりに機能し、append の文字列 arg 全体がタグに追加されます。私はいくつかのことを試しました

angular.element(element).append(....)

しかし、私はそれを機能させる方法を見つけることができません。これがどのように機能するかについて、私が理解していないことがありますか?

ありがとう!

4

2 に答える 2

4

私が知る限り、これは JQLite のバグです。

function JQLite(element) {

    ...

    if (isString(element)) {
        var div = document.createElement('div');
        // Read about the NoScope elements here:
        // http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx
        div.innerHTML = '<div>&#160;</div>' + element; // IE insanity to make NoScope elements work!
        div.removeChild(div.firstChild); // remove the superfluous div
        JQLiteAddNodes(this, div.childNodes);
        this.remove(); // detach the elements from the temporary DOM div.
    } else {
        JQLiteAddNodes(this, element);
    }
}

ご存知かもしれませんが、これはできません。

div.innerHTML = '<div></div><td>asdf</td>';

tdが削除されます。jQuery は同じことをしないと思います (おそらく、彼らは NoScope に関心がないのでしょうか?)。とはいえ、Angular だけを使い続けたい場合は、これで問題なく動作します。

element[0].innerHTML += '<td>Val 1xx</td><td>Val 2yy</td>'; 

Angular の github に問題を報告することをお勧めします。

于 2013-05-01T16:59:42.657 に答える
0

別の解決策はこれです:

    var cells = angular.element('<table><tbody><tr>' +
                                '<td>Val 1</td><td>Val 2</td>' +
                                '</tr></tbody></table>').children().children().children();
    element.append(cells);

そこは醜いですが、ユーティリティ関数でラップできると思います。

おそらく最善の解決策は、そのIE 狂気の行を削除することです。

http://jsfiddle.net/5fyBt/2/

于 2013-05-01T17:50:08.093 に答える