我试图将一些元素附加到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(....)


但我找不到使它起作用的方法。关于该如何工作我是否不了解?

谢谢!

最佳答案

据我所知,这是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上提交问题。

10-07 21:46