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 回答