2

プロジェクトでDOMを操作するためにjQueryを使用しています。次のように機能するクラスメソッドがあります。

<!-- 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);
    }

このメソッドはノードを作成して親ノードに追加するため、このメソッドの最初の呼び出しではすべて問題ありません。2番目の呼び出し(replaceWith()メソッドを使用)も問題なく機能します。しかし、その後のプロパティthis._BlockNode[0].parentNodeはnullです。したがって、3回目に呼び出して、プロパティなし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;

jQuery オブジェクトではなく、ネイティブ DOM 要素を保持する方が望ましい場合があります。_BlockNode

于 2012-12-19T21:54:41.537 に答える