jQuery.fn.empty()
関数とremove()
関数は非同期で実行されますか? この質問に対する答えは、jQuery ドキュメントのどこにも見つかりません。
1922 次
3 に答える
9
それらは両方とも同期しています。実際の実装のソースを見ることができます:
remove: function( selector, keepData ) {
var elem,
elems = selector ? jQuery.filter( selector, this ) : this,
i = 0;
for ( ; (elem = elems[i]) != null; i++ ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( getAll( elem ) );
}
if ( elem.parentNode ) {
if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
setGlobalEval( getAll( elem, "script" ) );
}
elem.parentNode.removeChild( elem );
}
}
return this;
},
empty: function() {
var elem,
i = 0;
for ( ; (elem = this[i]) != null; i++ ) {
if ( elem.nodeType === 1 ) {
// Prevent memory leaks
jQuery.cleanData( getAll( elem, false ) );
// Remove any remaining nodes
elem.textContent = "";
}
}
return this;
},
と は無視できるので、ループkeepData
とcleanData
ネイティブ DOM メソッドの呼び出しまたは DOM オブジェクト プロパティの変更だけが残ります。それらは両方とも同期しています。
于 2013-06-10T18:00:31.610 に答える
2
いいえ、それらは連鎖可能なメソッドであるため、元の jQuery オブジェクトを返す前に終了します。
于 2013-06-10T17:59:14.443 に答える
1
それらは同期的です。非同期にしたい理由がある場合 (現在の実行パスが終了するまで待ってから、いつかキューを空にする)、次のことができます。
// Empty asynchronously
setTimeout(function(){
$('...').empty();
}, 0);
于 2013-06-10T18:04:31.237 に答える