2

我在我的项目中使用 jQuery 来操作 DOM。我有类方法,它的工作原理是这样的:

<!-- language: lang-js -->    
var template = this._Template.split('{0}');
    var content = template[0] + this._Content + template[1];
    if (!this._BlockNode) {
        this._BlockNode = $(content);
        this._ParentNode.append(this._BlockNode);
    }
    else {
        this._BlockNode.replaceWith(content);
    }

第一次调用此方法时一切正常,因为它创建节点并将其附加到父节点。第二次调用(使用replaceWith()方法)也可以。但是在它之后属性this._BlockNode[0].parentNode为空。因此,当我第三次调用它并使用没有属性replaceWith()的 new时,它不会因为这个检查而替换节点的内容: 如何处理?_.BlockNode.parentNodeif ( !isDisconnected( this[0] ) ) { //line 5910 in jQuery 1.8.3

4

1 回答 1

3

您需要确保_BlockNode始终指向当前版本的内容。

当您调用时,replaceWith您正确更新了 DOM 结构,但未能更新对象的内容。原来的_BlockNode最终成为孤立的,所有后续replaceWith调用都在该节点上工作,而不是在较新的内容上。

试试这个:

var template = this._Template.split('{0}');
var $content = $(template[0] + this._Content + template[1]);
if (!this._BlockNode) {
    this._ParentNode.append($content);
} else {
    this._BlockNode.replaceWith($content);
}
this._BlockNode = $content;

最好本地 DOM 元素保存在_BlockNode而不是 jQuery 对象中。

于 2012-12-19T21:54:41.537 回答